Git的一些常用命令:

1、init,创建一个git仓库

[root@jroa git]# cd /usr/local/[root@jroa local]# mkdir github[root@jroa local]# cd github[root@jroa git]# git initInitialized empty Git repository in /usr/local/github/.git/[root@jroa git]# ls -a.  ..  .git

2、status,检查状态

[root@jroa git]# touch code1.py[root@jroa git]# git status # On branch master# Untracked files:#   (use "git add 
..." to include in what will be committed)## code1.pynothing added to commit but untracked files present (use "git add" to track)

3、add,文件添加到索引,也就是接受版本控制

[root@jroa git]# git add code1.py [root@jroa git]# git status # On branch master# Changes to be committed:#   (use "git reset HEAD 
..." to unstage)## new file:   code1.py#

4、commit,提交

[root@jroa git]# git commit -m "New add code1.py" #第一次会提示我们输入信息,名字与邮件[master 7894d32] New add code1.py Committer: root 
Your name and email address were configured automatically basedon your username and hostname. Please check that they are accurate.You can suppress this message by setting them explicitly:    git config --global user.name "Your Name"    git config --global user.email you@example.comIf the identity used for this commit is wrong, you can fix it with:    git commit --amend --author='Your Name 
' 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 code1.py[root@jroa git]# git config --global user.name sunshine                #名字[root@jroa git]# git config --global user.email sunshine@git.com       #邮件地址[root@jroa git]# git config --global color.ui                          #auto显示颜色

5、branc 创建、查看、删除分支

[root@jroa git]# git branch* master[root@jroa git]# git branch dev[root@jroa git]# git branch  dev* master[root@jroa git]# git branch -d devDeleted branch dev (was 7894d32).[root@jroa git]# git branch* master#删除分支会有另外一种诡异的现象发生[root@jroa git]# git checkout -b dev1        #创建并切换dev1分支Switched to a new branch 'dev1'[root@jroa git]# cat code.py [root@jroa git]# echo "print 'Sunshine Good~'" > code.py  #输出内容至code.py[root@jroa git]# cat code.py print 'Sunshine Good~'[root@jroa git]# git add code.py [root@jroa git]# git commit -m "New add rom 'Sunshine Good~'"[dev1 865c84e] New add rom 'Sunshine Good~' 1 files changed, 1 insertions(+), 0 deletions(-)[root@jroa git]# git checkout master                    #切换至masterSwitched to branch 'master'[root@jroa git]# cat code.py                            #查看mastercode.py,没有内容[root@jroa git]# git branch -d dev1                     #删除分支dev1报错,俩中方法,第一dev1确实不是我需要的,那么小d换成大D即可,第二个就下面步骤error: The branch 'dev1' is not fully merged.If you are sure you want to delete it, run 'git branch -D dev1'.[root@jroa git]# git merge dev1                         #合并分支dev1至masterUpdating bf266f5..865c84eFast-forward code.py |    1 + 1 files changed, 1 insertions(+), 0 deletions(-)[root@jroa git]# cat code.py print 'Sunshine Good~'[root@jroa git]# git branch -d dev1                    #使用小d删除分支dev1,删除成功Deleted branch dev1 (was 865c84e).[root@jroa git]#

6、checkout 切换 创建分支

[root@jroa git]# git checkout -b devSwitched to a new branch 'dev'[root@jroa git]# git branch* dev  master[root@jroa git]# git checkout masterSwitched to branch 'master'[root@jroa git]# git branch  dev* master

7、clone 克隆一个repository 信息在本地目录,哪自己之前做好的gitolite

[root@redis_master ~]# git clone git@127.0.0.1:devInitialized empty Git repository in /root/dev/.git/remote: Counting objects: 9, done.remote: Compressing objects: 100% (3/3), done.remote: Total 9 (delta 0), reused 0 (delta 0)Receiving objects: 100% (9/9), done.[root@redis_master ~]# lsanaconda-ks.cfg  appendonly.aof  dev  id_rsa.pub  install.log  install.log.syslog[root@redis_master ~]# cd dev/[root@redis_master dev]# lstest.txt

8、diff 对比文件

[root@jroa git]# lscode1.py  code.py[root@jroa git]# git status # On branch masternothing to commit (working directory clean)[root@jroa git]# vim code1.py [root@jroa git]# git diff                     #这里是对比暂存区与工作区对比diff --git a/code1.py b/code1.pyindex e69de29..66708be 100644--- a/code1.py+++ b/code1.py@@ -0,0 +1 @@+print 'Sunshine Good!'[root@jroa git]# git diff --staged            #这里是暂存区对比staged也就是我们commit的staged区[root@jroa git]# git add code1.py             #添加到暂存区[root@jroa git]# git diff                     #工作区对比暂存区[root@jroa git]# git diff --staged            #暂存区对比commit的stageddiff --git a/code1.py b/code1.pyindex e69de29..66708be 100644--- a/code1.py+++ b/code1.py@@ -0,0 +1 @@+print 'Sunshine Good!'[root@jroa git]# git commit -m "code1.py New add row Sunshine Good"    #提交[master bf266f5] code1.py New add row Sunshine Good 1 files changed, 1 insertions(+), 0 deletions(-)[root@jroa git]# git diff --staged                                     #对比暂存区以staged区[root@jroa git]# git diff                                              #对比工作区对比暂存区

9、log 就是日志咯,不过这里显示的可能比较诡异

[root@jroa git]# git log                                #详细显示commit bf266f5673089439efdd632a38b7220390af5cc7Author: sunshine 
Date:   Wed Oct 5 23:34:03 2016 +0800    code1.py New add row Sunshine Goodcommit 7894d320ac92997fdb4d0c74487d87def3ebf756Author: root 
Date:   Wed Oct 5 23:20:29 2016 +0800    New add code1.pycommit b4213472064fbc292eff843b6a67549344197495Author: root 
Date:   Wed Oct 5 21:45:23 2016 +0800    New add code.py[root@jroa git]# git log --oneline                      #简要显示bf266f5 code1.py New add row Sunshine Good7894d32 New add code1.pyb421347 New add code.py[root@jroa git]# git log --color --graph                #显示版本分支示意图        * commit bf266f5673089439efdd632a38b7220390af5cc7| Author: sunshine 
| Date:   Wed Oct 5 23:34:03 2016 +0800| |     code1.py New add row Sunshine Good|  * commit 7894d320ac92997fdb4d0c74487d87def3ebf756| Author: root 
| Date:   Wed Oct 5 23:20:29 2016 +0800| |     New add code1.py|  * commit b4213472064fbc292eff843b6a67549344197495  Author: root 
  Date:   Wed Oct 5 21:45:23 2016 +0800        New add code.py

10、merge 合并分支

[root@jroa git]# lscode1.py  code.py[root@jroa git]# git checkout -b dev        #创建并切换至分支devSwitched to a new branch 'dev'[root@jroa git]# git branch                 #查看当前位置所在分支* dev  master[root@jroa git]# vim code.py [root@jroa git]# cat code.py print 'Sunsine !'[root@jroa git]# git checkout master        #切换回masterM	code.pySwitched to branch 'master'[root@jroa git]# git merge dev              #合并分支devAlready up-to-date.[root@jroa git]# cat code.py print 'Sunsine !'[root@jroa git]# git branch -d dev          #删除分支Deleted branch dev (was bf266f5)

11、mv 重命名

[root@jroa git]# lscode1.py  code.py[root@jroa git]# git mv code1.py code.txt        #重命名code1.py-->code.txt[root@jroa git]# lscode.py  code.txt[root@jroa git]# git status                      #查看状态,显示 #	renamed:    code1.py -> code.txt# On branch master# Changes to be committed:#   (use "git reset HEAD 
..." to unstage)## renamed:    code1.py -> code.txt#[root@jroa git]# git add code.txt [root@jroa git]# git commit -m " Modify file name code1.py-->code.txt"[master 924041d]  Modify file name code1.py-->code.txt 1 files changed, 0 insertions(+), 0 deletions(-) rename code1.py => code.txt (100%)

12、rm 删除

[root@jroa git]# lltotal 8-rw-r--r-- 1 root root 23 Oct  5 23:53 code.py-rw-r--r-- 1 root root 23 Oct  5 23:32 code.txt[root@jroa git]# git rm code.txt                    #删除code.txtrm 'code.txt'[root@jroa git]# lltotal 4-rw-r--r-- 1 root root 23 Oct  5 23:53 code.py[root@jroa git]# git commit -am " Delete file code.txt"[master 82ec99e]  Delete file code.txt 1 files changed, 0 insertions(+), 1 deletions(-) delete mode 100644 code.txt

13、show等价于rev-parse,只不过一个是简要一个是明细

[root@jroa git]# git show HEAD~                     #看hash值commit 924041d5e2924e945f67816775869d4ceb9694ddAuthor: sunshine 
Date:   Wed Oct 5 23:57:25 2016 +0800     Modify file name code1.py-->code.txtdiff --git a/code.txt b/code.txtnew file mode 100644index 0000000..66708be--- /dev/null+++ b/code.txt@@ -0,0 +1 @@+print 'Sunshine Good!'diff --git a/code1.py b/code1.pydeleted file mode 100644index 66708be..0000000--- a/code1.py+++ /dev/null@@ -1 +0,0 @@-print 'Sunshine Good!'[root@jroa git]# git rev-parse HEAD~                #仔细看hash值是一样的924041d5e2924e945f67816775869d4ceb9694dd

14、cat-file 查看tree与parent

[root@jroa git]# git cat-file -t HEAD~            #-t 显示commitcommit[root@jroa git]# git cat-file -p HEAD~            #-p 显示tree与parenttree ea16f4c3781c4dc1f5e142eba114b0d5a1cefeaaparent 865c84e5f13fb239f83e3e27bcf0f3a28990034eauthor sunshine 
 1475683045 +0800committer sunshine 
 1475683045 +0800 Modify file name code1.py-->code.txt

15、reset 这个就比较复杂啦

[root@jroa git]# lltotal 4-rw-r--r-- 1 root root 23 Oct  6 00:17 code.py[root@jroa git]# git log --oneline                    #查看历史commit版本hash值82ec99e82ec99e  Delete file code.txt924041d  Modify file name code1.py-->code.txt865c84e New add rom 'Sunshine Good~'bf266f5 code1.py New add row Sunshine Good7894d32 New add code1.pyb421347 New add code.py[root@jroa git]# lltotal 4-rw-r--r-- 1 root root 23 Oct  6 00:17 code.py[root@jroa git]# git rm code.py                         #删除文件code.pyrm 'code.py'[root@jroa git]# git commit -am "Delete file code.py"   #commit -am等价于执行 #git add filename # git commit -m "Delete fie code.py",提示删除成功[master 3271a1d] Delete file code.py 1 files changed, 0 insertions(+), 1 deletions(-) delete mode 100644 code.py[root@jroa git]# ll                                    #查看不存在total 0[root@jroa git]# git status                            #也没报错# On branch masternothing to commit (working directory clean)[root@jroa git]# git log --oneline                     #查看commit版本hash值3271a1d Delete file code.py82ec99e  Delete file code.txt924041d  Modify file name code1.py-->code.txt865c84e New add rom 'Sunshine Good~'bf266f5 code1.py New add row Sunshine Good7894d32 New add code1.pyb421347 New add code.py[root@jroa git]# git reset --hard 82ec99e              #回滚到上个版本HEAD is now at 82ec99e  Delete file code.txt[root@jroa git]# ll                                    #OK文件回来了total 4-rw-r--r-- 1 root root 23 Oct  6 00:18 code.py[root@jroa git]# git log --oneline                     #回滚成功82ec99e  Delete file code.txt924041d  Modify file name code1.py-->code.txt865c84e New add rom 'Sunshine Good~'bf266f5 code1.py New add row Sunshine Good7894d32 New add code1.pyb421347 New add code.py

16、tag 标签,由于commit都是以hash记录,所以tag是为快速定义而准备的

[root@jroa git]# git log --oneline                    #查看commit版本的hash2989e89 New add rom Sunshinebf266f5 code1.py New add row Sunshine Good7894d32 New add code1.pyb421347 New add code.py[root@jroa git]# git tag v0.1.2 2989e89               #为hash值2989e89打上标签v0.1.2[root@jroa git]# git tag v0.1.3 bf266f5               #为hash值bf266f5打上标签v0.1.3[root@jroa git]# git tagv0.1.1v0.1.2v0.1.3[root@jroa git]# git tag v0.1.4                       #修改代码或者增加功能都可以直接给上tag[root@jroa git]# git show 2989e89                    #使用hash查找commit 2989e8927da83be9087933c17b074adeb2e91e2cAuthor: sunshine 
Date:   Wed Oct 5 23:49:07 2016 +0800    New add rom Sunshinediff --git a/code.py b/code.pyindex e69de29..3a2a051 100644--- a/code.py+++ b/code.py@@ -0,0 +1 @@+print 'Sunsine !'[root@jroa git]# git show v0.1.2                    #使用标签查找commit 2989e8927da83be9087933c17b074adeb2e91e2cAuthor: sunshine 
Date:   Wed Oct 5 23:49:07 2016 +0800    New add rom Sunshinediff --git a/code.py b/code.pyindex e69de29..3a2a051 100644--- a/code.py+++ b/code.py@@ -0,0 +1 @@+print 'Sunsine !'[root@jroa git]# git tag -d v0.1.1                 #删除标签Deleted tag 'v0.1.1' (was 2989e89)[root@jroa git]# git tagv0.1.2v0.1.3

17、pull 获取,这个用到我们之前搭建的gitolite

[root@redis_master dev]# git pull origin master            #没发现有人push,所以拉不到信息From 127.0.0.1:dev * branch            master     -> FETCH_HEADAlready up-to-date.[root@redis_master dev]# git push -f                       #为了测试这边使用-f强制覆盖更新Counting objects: 32, done.Delta compression using up to 4 threads.Compressing objects: 100% (19/19), done.Writing objects: 100% (32/32), 2.94 KiB, done.Total 32 (delta 0), reused 0 (delta 0)To git@127.0.0.1:dev + 4197bf0...addfd8f master -> master (forced update)[root@redis_master dev]# git pull                         #再试一下git pullremote: Counting objects: 24, done.remote: Compressing objects: 100% (16/16), done.remote: Total 23 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (23/23), done.From 127.0.0.1:dev + 4197bf0...addfd8f master     -> origin/master  (forced update)Merge made by recursive. 855.py    |    4 ++++ class.php |    1 + 2 files changed, 5 insertions(+), 0 deletions(-) create mode 100644 855.py create mode 100644 class.php[root@redis_master dev]# ll                               #拉取到代码了total 8-rw-r--r--. 1 root root 45 Oct  6 01:03 855.py-rw-r--r--. 1 root root  4 Oct  6 01:03 class.php

18、push 推送,这个用到我们之前搭建的gitolite

[root@redis_master dev]# git status                #查看状态# On branch masternothing to commit (working directory clean)[root@redis_master dev]# cat test.txt this is test file555[root@redis_master dev]# echo 44 >> test.txt       #修改内容[root@redis_master dev]# git commit -am "New add string 44"    #commit并说明[master 4197bf0] New add string 44 1 files changed, 1 insertions(+), 0 deletions(-)[root@redis_master dev]# git push                    #推送至我们的远程代码托管Counting objects: 5, done.Writing objects: 100% (3/3), 262 bytes, done.Total 3 (delta 0), reused 0 (delta 0)To git@127.0.0.1:dev   8a54bbe..4197bf0  master -> master

TortoiseGit的GUI界面有时间也会写一篇,其实这里只是简简单单的介绍了下命令的正常场景所遇见的问题!~更深层次的下次介绍呗^-^,下章估计是介绍Gitlab~~~