一些常用的Git命令

整理了非常由于的Git一些常用命令,Git是目前世界上最先进的分布式版本控制系统。由于它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

1、init,创建一个git仓库
[root@linuxidc git]# cd /usr/local/
[root@linuxidc local]# mkdir github
[root@linuxidc local]# cd github
[root@linuxidc git]# git init
Initialized empty Git repository in /usr/local/github/.git/
[root@linuxidc git]# ls -a
.  ..  .git

2、status,检查状态
[root@linuxidc git]# touch code1.py
[root@linuxidc git]# git status 
# On branch master
# Untracked files:
#  (use "git add <file>..." to include in what will be committed)
#
#  code1.py
nothing added to commit but untracked files present (use "git add" to track)

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

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

4、commit,提交
[root@linuxidc git]# git commit -m "New add code1.py" #第一次会提示我们输入信息,名字与邮件
[master 7894d32] New add code1.py
 Committer: root <root@linuxidc.(none)>
Your name and email address were configured automatically based
on 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 [email protected]
 
If the identity used for this commit is wrong, you can fix it with:
 
    git commit --amend --author='Your Name <[email protected]>'
 
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 code1.py
[root@linuxidc git]# git config --global user.name sunshine                #名字
[root@linuxidc git]# git config --global user.email [email protected]      #邮件地址
[root@linuxidc git]# git config --global color.ui                          #auto显示颜色

5、branc 创建、查看、删除分支
[root@linuxidc git]# git branch
* master
[root@linuxidc git]# git branch dev
[root@linuxidc git]# git branch
  dev
* master
[root@linuxidc git]# git branch -d dev
Deleted branch dev (was 7894d32).
[root@linuxidc git]# git branch
* master
 
#删除分支会有另外一种诡异的现象发生
[root@linuxidc git]# git checkout -b dev1        #创建并切换dev1分支
Switched to a new branch 'dev1'
[root@linuxidc git]# cat code.py 
[root@linuxidc git]# echo "print 'Sunshine Good~'" > code.py  #输出内容至code.py
[root@linuxidc git]# cat code.py 
print 'Sunshine Good~'
[root@linuxidc git]# git add code.py 
[root@linuxidc git]# git commit -m "New add rom 'Sunshine Good~'"
[dev1 865c84e] New add rom 'Sunshine Good~'
 1 files changed, 1 insertions(+), 0 deletions(-)
[root@linuxidc git]# git checkout master                    #切换至master
Switched to branch 'master'
[root@linuxidc git]# cat code.py                            #查看mastercode.py,没有内容
[root@linuxidc 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@linuxidc git]# git merge dev1                        #合并分支dev1至master
Updating bf266f5..865c84e
Fast-forward
 code.py |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
[root@linuxidc git]# cat code.py 
print 'Sunshine Good~'
[root@linuxidc git]# git branch -d dev1                    #使用小d删除分支dev1,删除成功
Deleted branch dev1 (was 865c84e).
[root@linuxidc git]#

6、checkout 切换 创建分支
[root@linuxidc git]# git checkout -b dev
Switched to a new branch 'dev'
[root@linuxidc git]# git branch
* dev
  master
[root@linuxidc git]# git checkout master
Switched to branch 'master'
[root@linuxidc git]# git branch
  dev
* master

7、clone 克隆一个repository 信息在本地目录,哪自己之前做好的gitolite
[root@redis_master ~]# git clone [email protected]:dev
Initialized 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 ~]# ls
anaconda-ks.cfg  appendonly.aof  dev  id_rsa.pub  install.log  install.log.syslog
[root@redis_master ~]# cd dev/
[root@redis_master dev]# ls
test.txt

8、diff 对比文件
[root@linuxidc git]# ls
code1.py  code.py
[root@linuxidc git]# git status 
# On branch master
nothing to commit (working directory clean)
[root@linuxidc git]# vim code1.py 
[root@linuxidc git]# git diff                    #这里是对比暂存区与工作区对比
diff --git a/code1.py b/code1.py
index e69de29..66708be 100644
--- a/code1.py
+++ b/code1.py
@@ -0,0 +1 @@
+print 'Sunshine Good!'
[root@linuxidc git]# git diff --staged            #这里是暂存区对比staged也就是我们commit的staged区
[root@linuxidc git]# git add code1.py            #添加到暂存区
[root@linuxidc git]# git diff                    #工作区对比暂存区
[root@linuxidc git]# git diff --staged            #暂存区对比commit的staged
diff --git a/code1.py b/code1.py
index e69de29..66708be 100644
--- a/code1.py
+++ b/code1.py
@@ -0,0 +1 @@
+print 'Sunshine Good!'
[root@linuxidc 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@linuxidc git]# git diff --staged                                    #对比暂存区以staged区
[root@linuxidc git]# git diff                                              #对比工作区对比暂存区

9、log 就是日志咯,不过这里显示的可能比较诡异
[root@linuxidc git]# git log                                #详细显示
commit bf266f5673089439efdd632a38b7220390af5cc7
Author: sunshine <[email protected]>
Date:  Wed Oct 5 23:34:03 2016 +0800
 
    code1.py New add row Sunshine Good
 
commit 7894d320ac92997fdb4d0c74487d87def3ebf756
Author: root <root@linuxidc.(none)>
Date:  Wed Oct 5 23:20:29 2016 +0800
 
    New add code1.py
 
commit b4213472064fbc292eff843b6a67549344197495
Author: root <root@linuxidc.(none)>
Date:  Wed Oct 5 21:45:23 2016 +0800
 
    New add code.py
[root@linuxidc git]# git log --oneline                      #简要显示
bf266f5 code1.py New add row Sunshine Good
7894d32 New add code1.py
b421347 New add code.py
[root@linuxidc git]# git log --color --graph                #显示版本分支示意图       
* commit bf266f5673089439efdd632a38b7220390af5cc7
| Author: sunshine <[email protected]>
| Date:  Wed Oct 5 23:34:03 2016 +0800

|    code1.py New add row Sunshine Good

* commit 7894d320ac92997fdb4d0c74487d87def3ebf756
| Author: root <root@linuxidc.(none)>
| Date:  Wed Oct 5 23:20:29 2016 +0800

|    New add code1.py

* commit b4213472064fbc292eff843b6a67549344197495
  Author: root <root@linuxidc.(none)>
  Date:  Wed Oct 5 21:45:23 2016 +0800
   
      New add code.py

10、merge 合并分支
[root@linuxidc git]# ls
code1.py  code.py
[root@linuxidc git]# git checkout -b dev        #创建并切换至分支dev
Switched to a new branch 'dev'
[root@linuxidc git]# git branch                #查看当前位置所在分支
* dev
  master
[root@linuxidc git]# vim code.py 
[root@linuxidc git]# cat code.py 
print 'Sunsine !'
[root@linuxidc git]# git checkout master        #切换回master
M  code.py
Switched to branch 'master'
[root@linuxidc git]# git merge dev              #合并分支dev
Already up-to-date.
[root@linuxidc git]# cat code.py 
print 'Sunsine !'
[root@linuxidc git]# git branch -d dev          #删除分支
Deleted branch dev (was bf266f5)

11、mv 重命名
[root@linuxidc git]# ls
code1.py  code.py
[root@linuxidc git]# git mv code1.py code.txt        #重命名code1.py-->code.txt
[root@linuxidc git]# ls
code.py  code.txt
[root@linuxidc git]# git status                      #查看状态,显示 #  renamed:    code1.py -> code.txt
# On branch master
# Changes to be committed:
#  (use "git reset HEAD <file>..." to unstage)
#
#  renamed:    code1.py -> code.txt
#
[root@linuxidc git]# git add code.txt 
[root@linuxidc 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@linuxidc git]# ll
total 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@linuxidc git]# git rm code.txt                    #删除code.txt
rm 'code.txt'
[root@linuxidc git]# ll
total 4
-rw-r--r-- 1 root root 23 Oct  5 23:53 code.py
[root@linuxidc 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@linuxidc git]# git show HEAD~                    #看hash值
commit 924041d5e2924e945f67816775869d4ceb9694dd
Author: sunshine <[email protected]>
Date:  Wed Oct 5 23:57:25 2016 +0800
 
    Modify file name code1.py-->code.txt
 
diff --git a/code.txt b/code.txt
new file mode 100644
index 0000000..66708be
--- /dev/null
+++ b/code.txt
@@ -0,0 +1 @@
+print 'Sunshine Good!'
diff --git a/code1.py b/code1.py
deleted file mode 100644
index 66708be..0000000
--- a/code1.py
+++ /dev/null
@@ -1 +0,0 @@
-print 'Sunshine Good!'
[root@linuxidc git]# git rev-parse HEAD~                #仔细看hash值是一样的
924041d5e2924e945f67816775869d4ceb9694dd

14、cat-file 查看tree与parent
[root@linuxidc git]# git cat-file -t HEAD~            #-t 显示commit
commit
[root@linuxidc git]# git cat-file -p HEAD~            #-p 显示tree与parent
tree ea16f4c3781c4dc1f5e142eba114b0d5a1cefeaa
parent 865c84e5f13fb239f83e3e27bcf0f3a28990034e
author sunshine <[email protected]> 1475683045 +0800
committer sunshine <[email protected]> 1475683045 +0800
 
 Modify file name code1.py-->code.txt

15、reset 这个就比较复杂啦
[root@linuxidc git]# ll
total 4
-rw-r--r-- 1 root root 23 Oct  6 00:17 code.py
[root@linuxidc git]# git log --oneline                    #查看历史commit版本hash值82ec99e
82ec99e  Delete file code.txt
924041d  Modify file name code1.py-->code.txt
865c84e New add rom 'Sunshine Good~'
bf266f5 code1.py New add row Sunshine Good
7894d32 New add code1.py
b421347 New add code.py
[root@linuxidc git]# ll
total 4
-rw-r--r-- 1 root root 23 Oct  6 00:17 code.py
[root@linuxidc git]# git rm code.py                        #删除文件code.py
rm 'code.py'
[root@linuxidc 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@linuxidc git]# ll                                    #查看不存在
total 0
[root@linuxidc git]# git status                            #也没报错
# On branch master
nothing to commit (working directory clean)
[root@linuxidc git]# git log --oneline                    #查看commit版本hash值
3271a1d Delete file code.py
82ec99e  Delete file code.txt
924041d  Modify file name code1.py-->code.txt
865c84e New add rom 'Sunshine Good~'
bf266f5 code1.py New add row Sunshine Good
7894d32 New add code1.py
b421347 New add code.py
[root@linuxidc git]# git reset --hard 82ec99e              #回滚到上个版本
HEAD is now at 82ec99e  Delete file code.txt
[root@linuxidc git]# ll                                    #OK文件回来了
total 4
-rw-r--r-- 1 root root 23 Oct  6 00:18 code.py
[root@linuxidc git]# git log --oneline                    #回滚成功
82ec99e  Delete file code.txt
924041d  Modify file name code1.py-->code.txt
865c84e New add rom 'Sunshine Good~'
bf266f5 code1.py New add row Sunshine Good
7894d32 New add code1.py
b421347 New add code.py

16、tag 标签,由于commit都是以hash记录,所以tag是为快速定义而准备的
[root@linuxidc git]# git log --oneline                    #查看commit版本的hash
2989e89 New add rom Sunshine
bf266f5 code1.py New add row Sunshine Good
7894d32 New add code1.py
b421347 New add code.py
[root@linuxidc git]# git tag v0.1.2 2989e89              #为hash值2989e89打上标签v0.1.2
[root@linuxidc git]# git tag v0.1.3 bf266f5              #为hash值bf266f5打上标签v0.1.3
[root@linuxidc git]# git tag
v0.1.1
v0.1.2
v0.1.3
[root@linuxidc git]# git tag v0.1.4                      #修改代码或者增加功能都可以直接给上tag
 
[root@linuxidc git]# git show 2989e89                    #使用hash查找
commit 2989e8927da83be9087933c17b074adeb2e91e2c
Author: sunshine <[email protected]>
Date:  Wed Oct 5 23:49:07 2016 +0800
 
    New add rom Sunshine
 
diff --git a/code.py b/code.py
index e69de29..3a2a051 100644
--- a/code.py
+++ b/code.py
@@ -0,0 +1 @@
+print 'Sunsine !'
[root@linuxidc git]# git show v0.1.2                    #使用标签查找
commit 2989e8927da83be9087933c17b074adeb2e91e2c
Author: sunshine <[email protected]>
Date:  Wed Oct 5 23:49:07 2016 +0800
 
    New add rom Sunshine
 
diff --git a/code.py b/code.py
index e69de29..3a2a051 100644
--- a/code.py
+++ b/code.py
@@ -0,0 +1 @@
+print 'Sunsine !'
[root@linuxidc git]# git tag -d v0.1.1                #删除标签
Deleted tag 'v0.1.1' (was 2989e89)
[root@linuxidc git]# git tag
v0.1.2
v0.1.3

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

[root@redis_master dev]# git pull origin master            #没发现有人push,所以拉不到信息
From 127.0.0.1:dev
 * branch            master    -> FETCH_HEAD
Already 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 [email protected]:dev
 + 4197bf0...addfd8f master -> master (forced update)
 
 
[root@redis_master dev]# git pull                        #再试一下git pull
remote: 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
12345678910111213141516 [root@redis_master dev]# git status                #查看状态
# On branch master
nothing to commit (working directory clean)
[root@redis_master dev]# cat test.txt 
this is test file
555
[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 [email protected]:dev
  8a54bbe..4197bf0  master -> master

更多 Git 教程系列文章: 

Git 的详细介绍:请点这里
Git 的下载地址:请点这里

相关推荐