Git基础二

在上篇文章中我们,介绍了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比较多还是单来一篇吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容