Git系列篇

Git基础二

2017-06-13  本文已影响23人  拙峰朽木

在上篇文章中我们,介绍了git status, git init ,git add ,git commit 这四个命令
通过这四个命令,我们成功的初始化了git的仓库,并提交了第一次更改。
下面我们看看这么查询我们的提交历史呢。

git log :输出历史

这个命令主要是输出commit的记录,也就是用户的提交历史。

frc@frc:~/GitHub/study/GitStudy$ git log
commit 7024df8d77c8b5c13673f809b88a3533e67afd42
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 12:23:41 2017 +0800

    test for git rm

commit 009f82b5c68e89408b4e3435f4bad176ef3cc847
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 12:08:02 2017 +0800

    test git rm

commit 26de8cfad13bb7e19dafc00a892ca8e786cfadc0
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 11:46:38 2017 +0800

    test git commit -a -m

commit 3d0a19a7dfce6fb7c627d5965098a355247ee49c
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 11:35:11 2017 +0800

    test git diff

这个命令会按时间顺序列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。

commit_id

commit  5d7589415b65d51bd18cbd3817f1b4f5d837ff00 

5d7589415b65d51bd18cbd3817f1b4f5d837ff00是一个SHA-1Hash值,它是对那个commit是Git仓库中内容和头信息(Header)的一个校验和(checksum),Linux kernel开创者和Git的开发者——Linus说,Git使用了SHA-1并非是为了安全性,而是为了数据的完整性;它可以保证,在很多年后,你重新checkout某个commit时,一定是它多年前的当时的状态,完全一摸一样,完全值得信任。在Git中,根据commit的SHA-1值(40个十六进制数字)进行了简单的划分目录,以前2位数字作为目录名,其下面是剩余38位数字组成的一个文件名.

git log -size

只查看最近的size条commit 信息

frc@frc:~/GitHub/study/GitStudy$ git log -2
commit 7024df8d77c8b5c13673f809b88a3533e67afd42
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 12:23:41 2017 +0800

    test for git rm

commit 009f82b5c68e89408b4e3435f4bad176ef3cc847
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 12:08:02 2017 +0800

    test git rm

git log -p

显示每次提交的内容差异

frc@frc:~/GitHub/study/GitStudy$ git log -p -2
commit 7024df8d77c8b5c13673f809b88a3533e67afd42
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 12:23:41 2017 +0800

    test for git rm

diff --git a/testForGitRm.txt b/testForGitRm.txt
new file mode 100644
index 0000000..6ebc240
--- /dev/null
+++ b/testForGitRm.txt
@@ -0,0 +1,2 @@
+
+test for git rm

commit 009f82b5c68e89408b4e3435f4bad176ef3cc847
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 12:08:02 2017 +0800

    test git rm

diff --git a/REDME.text b/REDME.text
index 55070be..322d181 100644

git log --stat

每次提交的简略的统计信息

frc@frc:~/GitHub/study/GitStudy$ git log --stat -2
commit 7024df8d77c8b5c13673f809b88a3533e67afd42
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 12:23:41 2017 +0800

    test for git rm

 testForGitRm.txt | 2 ++
 1 file changed, 2 insertions(+)

commit 009f82b5c68e89408b4e3435f4bad176ef3cc847
Author: fengrongcheng <fengrongcheng2017@outlook.com>
Date:   Tue Jun 13 12:08:02 2017 +0800

    test git rm

 REDME.text | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

git log --pretty

输出log的样式
之前的log输出形式太复杂了,其实我们只需要知道commit_id,commit_msg就行了,正常情况下作者邮箱只有在看别人代码时可能有用。我们使用git log --pretty 来定义个一行显示的:

frc@frc:~/GitHub/study/GitStudy$ git log --pretty=oneline
7024df8d77c8b5c13673f809b88a3533e67afd42 test for git rm
009f82b5c68e89408b4e3435f4bad176ef3cc847 test git rm
26de8cfad13bb7e19dafc00a892ca8e786cfadc0 test git commit -a -m
3d0a19a7dfce6fb7c627d5965098a355247ee49c test git diff
f697f00003fb4a848b51ead4e4286a84a7edadad   first commit again
5d7589415b65d51bd18cbd3817f1b4f5d837ff00 first commitC

各种筛选功能

--since, --after 仅显示指定时间之后的提交。
--author仅显示指定作者相关的提交。
--committer仅显示指定提交者相关的提交。
--grep仅显示含指定关键字的提交交。
-S仅显示添加或移除了某个关键字的提交

撤销操作

git commit --amend

作为一个资深的程序猿肯定碰到一个问题,就是你在开发过程中,写到某处commit了假设叫A,然后接着开发过一会又要提交B,这时你发现这2个commit可以归一个,作为一个有洁癖的你该怎么办呢,这里就需要用到git commit --amend了,最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。

git checkout -- file

我现在对REDME文件进行修改,突然觉得之前修改的是不对的,我要还原成没修改之前的样子该怎么办呢,其实 在使用git status时,log日志早就是提示我们了,那就是用使用 "git checkout -- file..." 丢弃工作区的改动,我们来试试。
没有加入暂缓区前 :

frc@frc:~/GitHub/study/GitStudy$ vi REDME.text 
frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <file>..." 更新要提交的内容)
  (使用 "git checkout -- <file>..." 丢弃工作区的改动)

    修改:     REDME.text

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
frc@frc:~/GitHub/study/GitStudy$ git checkout -- REDME.text 
frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
无文件要提交,干净的工作区
frc@frc:~/GitHub/study/GitStudy$ 

之前的情况是没有add的,那么如果已经加入暂缓区的该怎么办呢?

git reset HEAD file

其实取消加入暂缓区的方法,在使用git status的时候也已经告诉我们了
看下面的操作流程 vi REDME.txt其实是去修改文件了

frc@frc:~/GitHub/study/GitStudy$ vi REDME.text 
frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <file>..." 更新要提交的内容)
  (使用 "git checkout -- <file>..." 丢弃工作区的改动)

    修改:     REDME.text

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
frc@frc:~/GitHub/study/GitStudy$ git add REDME.text 
frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <file>..." 撤出暂存区)

    修改:     REDME.text

frc@frc:~/GitHub/study/GitStudy$ git reset HEAD REDME.text 
重置后撤出暂存区的变更:
M   REDME.text
frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <file>..." 更新要提交的内容)
  (使用 "git checkout -- <file>..." 丢弃工作区的改动)

    修改:     REDME.text

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

so,是不是感觉看log日志是很有帮助的。

git checkout

上面的一些列操作都是针对尚未commit 的改动,如果我已经commit,或者说我现在想把代码回退到某个commit之前该怎么办呢。那么现在一直出现的commit_id就派上用场了。由于commit_id是唯一标示,它其实就代表了你这次的提交(比commit _msg靠谱多了),所以我们可以以它为标记来检索代码。
不过git checkout比较多还是单来一篇吧

上一篇下一篇

猜你喜欢

热点阅读