1. 程式人生 > >Git 學習進階篇 -歷史檢視

Git 學習進階篇 -歷史檢視

Git歷史記錄的檢視與對比

主要涉及到三個命令:git log 、git diff 、git show

git log 命令使用

在專案提交了若干記錄,==git log== 命令可以檢視提交歷史:

$ git log
commit d8e6e7d0a2bbc4483bf5c0d884daec7bfc37b861      
Merge: 872942d 3b9ceaa                              //合併分支的兩個 SHA-1校驗  
Author: just <[email protected]163.com>
Date:   Sun Nov 13
15:29:44 2016 +0800 Merge branch 'branch_V0' commit 872942db74378b9be73d3fc22a44350ddd039277 //SHA-1校驗和 Author: just <[email protected]163.com> //作者名字和郵件 Date: Sun Nov 13 14:52:09 2016 +0800 //提交時間 commit on branch_merge //提交說明 commit
3b9ceaa45c8f5e3ab2521b5f549a58901c1dec60 Author: just <[email protected]163.com> Date: Sun Nov 13 14:47:49 2016 +0800 commit on branch_V0 commit 629aa7f0e58853c39ae22e1b6ab06a5d148eac13 Author: just <[email protected]163.com> Date: Sun Nov 13 13:03:03 2016 +0800 second commit on
master commit 51549925f380bd46c291f02d8988d368c28ecaab Author: just <[email protected]163.com> Date: Sun Nov 13 13:01:12 2016 +0800 master.d first time commit

預設不用任何引數的話,==git log== 會按提交時間列出所有的更新,最近的更新排在最上面。每次更新都有一個 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間,最後縮排一個段落顯示提交說明。

在使用git log命令檢視歷史記錄時,使用 空格、enter鍵、B、以及上下鍵來進行翻頁,使用q退出歷史檢視

具體使用

常用命令:

命令 描述 作用
git log -p 展開顯示每次提交的內容差異 清晰對比每次commit的變化情況
git log –stat 僅顯示簡要的增改行數統計 列出修改過的檔案,以及其中新增和移除的行數,並在最後列出所有增減行數小計
git log –oneline 將日誌資訊簡要為一行顯示

1. git log -p -2

$ git log -p
commit 257f3a287fd04f1bbf9328e9b80398353569e6fa
Author: xx
Date:   Mon Nov 14 22:29:37 2016 +0800

    modify master.d

diff --git a/master.d b/master.d
index ded902a..61ed066 100644
--- a/master.d
+++ b/master.d
@@ -1,4 +1,7 @@
 111111111
 222222222
 modify on branch branch_marge
-modify on branch_V0               //顯示出內容差異,新增和刪除
+modify on branch
+
+
+

commit d8e6e7d0a2bbc4483bf5c0d884daec7bfc37b861
Merge: 872942d 3b9ceaa
Author: xx
Date:   Sun Nov 13 15:29:44 2016 +0800

    Merge branch 'branch_V0'
  1. git log –stat
$ git log --stat
commit 257f3a287fd04f1bbf9328e9b80398353569e6fa
Author: just <just@163.com>
Date:   Mon Nov 14 22:29:37 2016 +0800

    modify master.d

 master.d | 5 ++++-    
 1 file changed, 4 insertions(+), 1 deletion(-)   //顯示更新的統計資訊
  1. git log –oneline
$ git log --oneline
257f3a2 modify master.d             //簡要為一行顯示
d8e6e7d Merge branch 'branch_V0'
872942d commit on branch_merge
3b9ceaa commit on branch_V0
629aa7f second commit on master
5154992 master.d first time commit

其他命令:

命令 描述
-p 按補丁格式顯示每個更新之間的差異。
–word-diff 按 word diff 格式顯示差異。
–stat 顯示每次更新的檔案修改統計資訊。
–shortstat 只顯示 –stat 中最後的行數修改新增移除統計。
–name-only 僅在提交資訊後顯示已修改的檔案清單。
–name-status 顯示新增、修改、刪除的檔案清單。
–abbrev-commit 僅顯示 SHA-1 的前幾個字元,而非所有的 40 個字元。
–relative-date 使用較短的相對時間顯示(比如,“2 weeks ago”)。
–graph 顯示 ASCII 圖形表示的分支合併歷史。
–pretty 使用其他格式顯示歷史提交資訊。可用的選項包括 oneline,short,full,fuller 和 format(後跟指定格式)。
–oneline –pretty=oneline –abbrev-commit 的簡化用法。

命令–word-diff顯示的是行層面的對比,將其與 -p 組合可以獲得單詞層面的對比

$ git log -p --word-diff
commit 257f3a287fd04f1bbf9328e9b80398353569e6fa
Author: xx
Date:   Mon Nov 14 22:29:37 2016 +0800

    modify master.d

diff --git a/master.d b/master.d
index ded902a..61ed066 100644
--- a/master.d
+++ b/master.d
@@ -1,4 +1,7 @@
111111111
222222222
modify on branch branch_marge
modify on [-branch_V0-]{+branch+}   //兩次提交涉及行層面的 單詞對比

新增加的單詞被 {+ +} 括起來,被刪除的單詞被 [- -] 括起來

此外,==–pretty==可以使用完全不同於預設格式的方式展示提交歷史,如:

$ git log --pretty=oneline      //與git log --oneline顯示不同
257f3a287fd04f1bbf9328e9b80398353569e6fa modify master.d
d8e6e7d0a2bbc4483bf5c0d884daec7bfc37b861 Merge branch 'branch_V0'
872942db74378b9be73d3fc22a44350ddd039277 commit on branch_merge

==format==,可以定製要顯示的記錄格式,這樣的輸出便於後期程式設計提取分析,如

$ git log --pretty=format:"%h - %an, %ar : %s"
257f3a2 - just, 29 minutes ago : modify master.d
d8e6e7d - just, 31 hours ago : Merge branch 'branch_V0'
872942d - just, 32 hours ago : commit on branch_merge
3b9ceaa - just, 32 hours ago : commit on branch_V0
629aa7f - just, 34 hours ago : second commit on master
5154992 - just, 34 hours ago : master.d first time commit

其引數及含義:

命令 說明
%H 提交物件(commit)的完整雜湊字串
%h 提交物件的簡短雜湊字串
%T 樹物件(tree)的完整雜湊字串
%t 樹物件的簡短雜湊字串
%P 父物件(parent)的完整雜湊字串
%p 父物件的簡短雜湊字串
%an 作者(author)的名字
%ae 作者的電子郵件地址
%ad 作者修訂日期(可以用 -date= 選項定製格式)
%ar 作者修訂日期,按多久以前的方式顯示
%cn 提交者(committer)的名字
%ce 提交者的電子郵件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式顯示
%s 提交說明

用 oneline 結合 –graph 選項(或 format 時),可以看到開頭多出一些 ASCII 字串表示的簡單圖形,形象地展示了每個提交所在的分支及其分化衍合情況。

$ git log --graph --oneline
* 257f3a2 modify master.d
*   d8e6e7d Merge branch 'branch_V0'
|\
| * 3b9ceaa commit on branch_V0
* | 872942d commit on branch_merge
* | 629aa7f second commit on master
|/
* 5154992 master.d first time commit

限制輸出長度

除了定製輸出格式的選項之外,git log 還有許多非常實用的限制輸出長度的選項,也就是隻輸出部分提交資訊。

命令 說明
-(n) 僅顯示最近的 n 條提交
–since, –after 僅顯示指定時間之後的提交。
–until, –before 僅顯示指定時間之前的提交。
–author 僅顯示指定作者相關的提交。
–committer 僅顯示指定提交者相關的提交。

下面的命令列出所有最近兩週內的提交:
$ git log –since=2.weeks

$ git log --since=2.weeks
commit 257f3a287fd04f1bbf9328e9b80398353569e6fa
Author:xx
Date:   Mon Nov 14 22:29:37 2016 +0800

    modify master.d

十小時前:

$ git log --since=10.hour
commit 257f3a287fd04f1bbf9328e9b80398353569e6fa
Author: xx
Date:   Mon Nov 14 22:29:37 2016 +0800

    modify master.d

另一個真正實用的git log選項是路徑(path),如果只關心某些檔案或者目錄的歷史提交,可以在 git log 選項的最後指定它們的路徑,使用 – 與之前命令分開。

在專案中有檔案 dir1/test.d

$ git log --pretty=oneline -- dir1/test.d
cc5ebf86a2e294856c4d79c6e0d2323d46cf8980 111111111

圖形化工具檢視

==gitk== 命令

git diff

命令 描述
git diff 輸出工作區與暫存區的差異
git diff –cached 輸出暫存區與歷史區差異
git diff –cached 指暫存區中的差異
git diff HEAD~2 某次提交的差異
git diff HEAD~3 HEAD~2 某兩次提交物件之間的差異
git diff –color-words 單詞間差異

1. 本地工作區與暫存區

$ vim master.d  //先對工作區的mater.d 檔案進行修改
$ git diff      //檢視差異
diff --git a/master.d b/master.d
index 2c9fe9f..d76916d 100644
--- a/master.d
+++ b/master.d
@@ -3,5 +3,5 @@
 modify on branch branch_marge
 modify on branch

-efe
+ef223e
  1. 暫存區與歷史區
$ git add .
$ git diff --cached
diff --git a/master.d b/master.d
index 2c9fe9f..d76916d 100644
--- a/master.d
+++ b/master.d
@@ -3,5 +3,5 @@
 modify on branch branch_marge
 modify on branch

-efe
+ef223e
  1. 檢視歷史提交差異

    • HEAD 永遠指向最新的提交的物件,HEAD^^ 近第二次次提交的物件,或者使用 HEAD~n n指正整數
$ git diff HEAD~2 -- master.d
diff --git a/master.d b/master.d
index ded902a..d76916d 100644
--- a/master.d
+++ b/master.d
@@ -1,4 +1,7 @@
 111111111
 222222222
 modify on branch branch_marge
-modify on branch_V0
+modify on branch
+
+ef223e
+
  • git diff –cached 指暫存區中的差異
$ git diff  --cached HEAD~2 -- master.d
diff --git a/master.d b/master.d
index ded902a..d76916d 100644
--- a/master.d
+++ b/master.d
@@ -1,4 +1,7 @@
 111111111
 222222222
 modify on branch branch_marge
-modify on branch_V0
+modify on branch
+
+ef223e
+
  • git diff HEAD~3 HEAD~2 某兩次提交物件之間的差異
$ git diff HEAD~3 HEAD~2 -- master.d
diff --git a/master.d b/master.d
index 1800c80..ded902a 100644
--- a/master.d
+++ b/master.d
@@ -1,3 +1,4 @@
 111111111
 222222222
 modify on branch branch_marge
+modify on branch_V0
  • git diff –color-words 單詞間差異
$ git diff --color-words
diff --git a/master.d b/master.d
index d76916d..e7bd13e 100644
--- a/master.d
+++ b/master.d
@@ -3,5 +3,5 @@
modify on branch branch_marge
modify on branch

ef223eef223eabc

git show

  1. ==git show== 命令接受git物件作為引數,輸出完整提交的差異資訊,如:
命令 描述
git show SHA-1 輸出某一提交物件的記錄
git show master 輸出示master分支最新提交引用
git show master~2 輸出master分支上近第二次提交記錄
git show –oneline(其他) 格式化輸出
$ git lol               //檢視歷史
* cc5ebf8 (HEAD -> master) 111111111
* 257f3a2 modify master.d
*   d8e6e7d Merge branch 'branch_V0'

$ git show cc5ebf8
commit cc5ebf86a2e294856c4d79c6e0d2323d46cf8980
...                //顯示詳細差異資訊
 modify on branch branch_marge
 modify on branch
+efe

git show cc5ebf8 ,顯示SHA-1校驗和為cc5ebf8的提交記錄差異,當然這裡 與命令 git how 和 git show master是等價的,因為都是顯示 matser分支上最新的提交。

$ git show --oneline master~2  //格式化輸出
diff --cc master.d      //將記錄資訊縮短為一樣,下面都是差異
index 1800c80,eb4949f..ded902a
--- a/master.d
+++ b/master.d
@@@ -1,3 -1,3 +1,4 @@@
  111111111
 -
 +222222222
 +modify on branch branch_marge
+ modify on branch_V0
  1. 檢視其他git物件

tag物件

$ git tag
MASTER_FIRST
V0

Administrator@Just-pc MINGW32 /g/git_test/git_repo (master)
$ git show V0
commit 51549925f380bd46c291f02d8988d368c28ecaab
....
@@ -0,0 +1 @@
+111111111

tree物件

$ git show --format=%t master   //簡要輸出tree物件:format %t 
0b3d703                         //tree物件 SHA-1

diff --git a/dir1/test.d b/dir1/test.d
new file mode 100644
index 0000000..e69de29

$ git show 0b3d703             //輸出tree差異
tree 0b3d703

dir1/                         //tree物件中的檔案
master.d

blob物件

$ git show --format=%t master~2
389039c                          //tree物件

diff --cc master.d      
index 1800c80,eb4949f..ded902a   //blob物件 

$ git show 1800c80
111111111
222222222
modify on branch branch_marge

END.

  • git show 輸出以git物件為引數的提交差異資訊
  • git log則可以更加詳細的差異統計資訊
  • git diff 可以輸出更加具體的提交之間的差異,還可以比較 不同區 之間的差異

more

相關推薦

Git 學習 -歷史檢視

Git歷史記錄的檢視與對比 主要涉及到三個命令:git log 、git diff 、git show git log 命令使用 在專案提交了若干記錄,==git log== 命令可以檢視提交歷史: $ git log commit d8e6e7

Git 學習

Git brach 分支 Git可以建立多個分支,用於對不同版本程式碼分別進行維護操作。 Git對每個分支預設讀取最新commit索引。 branch操作常用命令: 命令 描述 例項 git branch xx 建

剖析 git

假設現在你正在一個目錄中開發一個剛起步的專案,忙活了一天,自己不小心按下了強制刪除的快捷鍵,或者是哪個和你關係不太好的同事刪除掉了你的專案,這個時候如果你沒有初始化(git init)過一個git倉庫,並且git add過,那對不起,從頭再來吧。但如果你已經有了一個git倉庫,並且使用過git add命令

SODBASE CEP學習(二)續:日誌採集-Logstash、Kafka和CEP整合

相比Flume,筆者更推薦使用Logstash做日誌採集,見SODBASE CEP學習進階篇(二)續:日誌採集-Logstash、Kafka和CEP整合。如果之前專案中已經選型使用Flume,則本文供參考。 1. 啟動CEP模型 啟動CEP Server ./catalina

SODBASE CEP學習(七)續:SODBASE CEP與Spark streaming整合-低延遲規則管理 與分散式快取整合

在實際大資料工作中,常常有實時監測資料庫變化或實時同步資料到大資料儲存,解決大資料實時分析的需求。同時,增量同步資料庫資料相比全量查詢也減少了網路頻寬消耗。本文以Mysql的bin-log到Kafka為例,使用Canal Server,通過SODBASE引擎不用寫程式就可以設定資料同步規則。

SODBASE CEP學習(二):日誌採集-Flume

在IT系統運維和效能監控中,常常需要對日誌進行分析,得到系統的故障點或效能瓶頸。採用現成的日誌分析軟體,通常著重於監測節點和網路狀態,幾乎都難以滿足大型應用系統對故障點或效能瓶頸分析的要求。 舉幾個例子: (1)找出故障的上下層呼叫的關係,定位應用層故障對應的底層介面 (

SODBASE CEP學習(六):實現反壓和流限速

前面文章介紹過流資料輸入速率要和處理能力相匹配,短時資料爆發由內部緩衝佇列來緩衝。如果確實存在某個時間點持續資料爆發,可以考慮採取反壓限流的方法。 1. 示例操作步驟 (1)下載SODBASE Studio2.0.22(sp1)以上版本,解壓,開啟configuration

SODBASE CEP學習(七)續:SODBASE CEP與Spark streaming整合-低延遲規則管理

許多大資料平臺專案採用流式計算來處理實時資料,會涉及到一個環節:處理規則管理。因為使用者經常有自己配置資料處理規則或策略的需求。同時,維護人員來也有也有將規則提取出來的需求,方便變更和維護的需求。我們知道Spark streaming作為資料歸檔備份時吞吐量高,與Hadoo

Vue學習筆記——多元素及多組件過渡

之前 bsp lan ssa 當前 好的 can cancel 簽名 本文為轉載,原文:Vue學習筆記進階篇——多元素及多組件過渡 多元素的過渡 對於原生標簽可以使用 v-if/v-else.但是有一點需要註意: 當有相同標簽名的元素切換時,需要通過 key 特性設置唯一

Vue學習筆記——Render函數

resp targe 無效 數據 iso 簡潔 如果 som cimage 本文為轉載,原文:Vue學習筆記進階篇——Render函數 基礎 Vue 推薦在絕大多數情況下使用 template 來創建你的 HTML。然而在一些場景中,你真的需要 JavaScript 的完全

Vue學習筆記——過渡狀態

節點 val start 學習筆記 update 設置 hub reat res 本文為轉載,原文:Vue學習筆記進階篇——過渡狀態Vue 的過渡系統提供了非常多簡單的方法設置進入、離開和列表的動效。那麽對於數據元素本身的動效呢,比如: 數字和運算 顏色的顯示 SVG 節

Vue學習筆記——列表過渡及其他

absolut compute top sla 做的 有一個 .cn -s cas 本文為轉載,原文:Vue學習筆記進階篇——列表過渡及其他本文將介紹Vue中的列表過渡,動態過渡, 以及可復用過渡是實現。 列表過渡 目前為止,關於過渡我們已經講到: 單個節點 同一時間渲染

React學習筆記之react(1)

ava 不能 success 字符 style 使用 -s 布爾 一次 1.組件的state(狀態) 1.選擇合適的state   state所代表的一個組件UI呈現的完整狀態集又可以分成兩類數據:用作渲染組件時使用到的數據的來源以及用作組件UI展現形式的判斷依據。 示

React學習筆記之react(2)

-s state ops category strong tro 服務 ive 周期 2.組件與服務器通信   組件的生命周期分為三個階段:掛載階段->更新階段->卸載階段,本文主要集中講述掛載和更新階段組件如何和服務器進行通信。 1.組件掛載階段通信  

Oracle RMAN 學習:演練

  Oracle RMAN 學習:演練進階篇 5 Rman備份演練進階篇 5.1 是否選擇增量備份  Backup命令生成的備份集中只備份了那些使用了的資料塊,備份集實際大小已經較目標資料庫的資料檔案小了很多 備份時只備份那些修改過的資料,  如果資料庫在非歸檔模式下

php程式設計師的學習路線,以及

# PHP interview best practices in China 如果你現在處於以下幾種狀態,本資料非常適合你: * 準備換工作,不知道從哪開始準備 * 技術遇到瓶頸,不知道該學什麼 * 準備學 PHP,但不知道領域有多深 ## 基礎篇 * 瞭解大部分陣列處理函式 * 字串處

Vue學習筆記——vue-resource安裝及使用

簡介 vue-resource是Vue.js的一款外掛,它可以通過XMLHttpRequest或JSONP發起請求並處理響應。也就是說,$.ajax能做的事情,vue-resource外掛一樣也能做到,而且vue-resource的API更為簡潔。 本文是基於之前的文章(Vue學習筆記進

(3)PHP 學習筆記 from imooc

可以使用下面程式碼實現: $fruit = array("蘋果","香蕉","菠蘿"); 注意陣列的鍵是從0開始的。可以使用print_r($fruit);語句輸出陣列鍵及對應的值。 <?php   //建立一個索引陣列,索引陣列的鍵是“0”,值是“蘋果” $

從頭學習爬蟲(三十六)----Selenium高階

引自:自上世紀末Kent Beck提出TDD(Test-Driven Development)開發理念以來,開發和測試的邊界變的越來越模糊,從原本上下游的依賴關係,逐步演變成你中有我、我中有你的互賴關係,甚至很多公司設立了新的QE(Quality Engineer)職位。和

Vue學習筆記——vue-router安裝及使用

介紹 vue-router是Vue.js官方的路由外掛,它和vue.js是深度整合的,適合用於構建單頁面應用。vue的單頁面應用是基於路由和元件的,路由用於設定訪問路徑,並將路徑和元件對映起來。傳統的頁面應用,是用一些超連結來實現頁面切換和跳轉的。在vue-ro