Git基础二

作者: 拙峰朽木 | 来源:发表于2017-06-13 15:45 被阅读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比较多还是单来一篇吧

    相关文章

      网友评论

        本文标题:Git基础二

        本文链接:https://www.haomeiwen.com/subject/bjgdqxtx.html