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'
- 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(-) //顯示更新的統計資訊
- 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
- 暫存區與歷史區
$ 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
檢視歷史提交差異
- 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
- ==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
- 檢視其他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