gitk
工具是Git提供的一個GUI工具,可以很清晰地查看和搜索版本庫中的提交歷史,以及支持對Gi的t相關操作。在Git本地版本庫目錄下直接輸入gitk
命令即可查看當前分支的。
這個工具不用特殊的安裝,一定要進入某一個倉庫中,在git終端,執行gitk
命令就能使用了。
前提:一定要進入某一個倉庫中,並且這個倉庫中有Git日誌,否則執行Gitk會提示
Cannot find a git repository here.
1、Gitk頁面的佈局
先看一下Gitk
全局頁面,如下圖:
Gitk
頁面中包含5個部分:
主菜單欄。
提交信息顯示區:顯示提交的基本信息,包括提交的版本分支視圖、
message
、提交人、提交時間和對應提交的SHA1-ID
。查詢檢索區:在文本框中輸入需要查找的檢索信息,並且從左邊和右邊的下拉框中,選擇相應類型,幫助我們快速精確的定位到要查找的信息,可按提交人等類型查找提交記錄。
提交詳情顯示區:顯示提交的詳細信息。
-
文件列表顯示區:可以顯示提交中包含的文件列表。
Patch
:顯示本次提交的差異文件列表。Tree
:顯示本次提交記錄的所有文件列表。
2、主菜單欄
(1)File
-
Update
:更新。如果在另一個窗口的命令行上做了什麼,並希望將這些更改反映在Gitk中。
該操作更新引用並顯示新值,同時仍顯示舊值。
它在執行了像
rebase
這樣的操作之後最有用,因爲可以比較前一個分支頭和新的分支頭。 Reload
:完全刷新,扔掉以前顯示的所有內容。Reread references
:刷新標籤和分支。List references
:出現一個窗口顯示,以列表的方式顯示分支和標籤。Start git gui
:打開git gui
工具。(類似於TortoiseGit)Quit
:退出Gitk。
(2)Edit
preferences
:首選項,對Gitk的一些個人設置,如最大顯示行數,寬度,空格個數,顏色和字體的設置等。
(3)View
這個菜單主要是設置快速查詢視圖。
通過New view...
新建視圖,進行自定義配置,並保存視圖。
下面介紹一寫查詢條件的設置:
-
references(space separated list)
:可以指定一個refs,可以是tag,branch,下面還可以選擇All xxx。 -
commit info(regular expressions
):可以指定提交信息的Author、Committer、Message作爲查詢條件。 -
Changes to Files
:可以指定修改的文件內容作爲查詢條件,可以是固定的文本,也可以是正則表達式。 -
Commit Date
:可以指定時間範圍作爲查詢條件。 -
Limit and/or skip a number of revision
:可以指定只顯示revision(修訂版)數量,或者可以從頭跳過一定數量的revisions,值爲正整數。 -
miscellaneous options
:其他選項,比如:按時間排序,標記分支側,限制只顯示第一個parent,簡單歷史顯示。還可以使用其他git log
命令參數。 -
Enter files and directories to include,one per line
:可以指定一些文件或目錄,每行一個。 -
Command to generate more commits to include
:這個除了上面指定的選項外,還可以可以指定一些命令來過濾commit記錄,更加靈活。
如下圖:
創建過視圖後,再次在點擊View
菜單,就可以選擇Edit view...
編輯視圖,和Delete view
刪除視圖了。
(4)Help
-
About gitk
:Gitk簡介。 -
Key bindings
:查看快捷鍵。
3、提交信息顯示區
(1)內容顯示說明
該區域顯示版本庫中提交的基本信息,包括提交的版本分支視圖、message
、提交人、提交時間和對應提交的SHA1-ID
。
-
SHA1 ID
:所選提交的commit-id。 -
Row
:當前行數/總行數,每個提交一行。
(2)顏色和粗體
- 本地分支名稱是綠色背景,如
master
分支。 - 遠程分支名稱是橘色和綠色混合的背景色。
- 當前所在的分支或標籤名稱以粗體顯示,如
master
分支。 - 標籤是黃色背景,如
v1.0
標籤。 - 黃色圓點標誌,便是當前HEAD的指向。
- 黃色的方塊標記,代表該提交有
notes
。Git備註(notes)是用於給提交補充消息的,但是不會改變提交信息。
(3)版本分支視圖的使用
在版本分支圖中的某一個提交上右鍵,還可以進行很多的操作。
可以根據分支和commit顯示不同的菜單,完成不同的操作。
1)選中一個分支,比如:master
。
check out this branch
:檢出這個分支,當有多個分支時,且當前HEAD不在該分支時可用。rename this branch
:重命名分支。Remove this branch
:移除分支,當有多個分支時,且當前HEAD不在該分支時可用。
2)選中一個提交
Diff this->selected
、Diff selected ->this
、Make patch
這幾個需要2個commit進行對比,此時爲灰色。Return to mark
、Find descendant of this and mark
、Compare with marked commit
、Diff this->marked commit
、Diff marked commit->this
這幾個是個marked commit
相關,看下面。Create tag
:基於選中的commit創建一個tag。Copy commit summary
:拷貝提交的信息,包括7位commit ID、message和提交日期。Write commit to file
:將該commit的詳細信息寫到一個文件,包括提交信息和提交內容。Create new branch
:基於該commit創建分支。Cherry-pick this commit
:將該commit應用到當前HEAD分支。Reset ${BRANCH} branchs to here
:將當前分支重置到當前commit。Mark this commit
:標記當前commit,標記後,右鍵其他commit時跟marked 相關的菜單可用,只能有一個Marked的commit。Revert this commit
:回退到當前commit。Revert和Reset是不一樣的,Revert會生成一個新的commit。
3)基於上面選中且Marked的commit,右鍵其他任意一個commit,之前灰色的菜單就可用了。
Diff this-> selected
:當前commit與選中的commit的diff。diff內容會在區域4中顯示,diff文件列表在區域5中顯示。Diff selected-> this
:選中的commit與當前commit的diff。diff內容會在區域4中顯示,diff文件列表在區域5中顯示。Make patch
:將這兩個commit的diff生成一個patch文件。Return to mark
: 切換回到marked的commit。Find descendant of this and mark
:查找當前commit和Marked commit共同的後代節點。Compare with marked commit
:當前commit與Marked commit的比較。這裏的比較和diff是不一樣的。Diff this->marked commit
:當前commit和Marked commit的diff。Diff marked commit->this
:Marked commit與當前commit的diff,與上圖相反。
這些是右鍵菜單的基本功能,可以找一個代碼庫多練習。
4、查詢檢索區
根據檢索條件查找的窗口。
這個窗口有強大的檢索功能,能夠根據作者、提交人、變更文件、變更內容等查找commit。當我們在排查問題時,一般不記得具體是在那次提交裏做的變更,但我們可能會記得是哪個文件,是誰提交的,此時我們就可以通過檢索查找commit,對於根據變更文件查找,可以配合使用區域5的文件樹,效果會更好。
在Find這一行有幾個區域:
-
Find ↑↓ commit
:當根據檢索條件檢索出結果後,通過上下箭頭切換不同的commit。 - 檢索類型列表
containing
:包含。與後面的範圍配合使用。
touching paths
:文件路徑。
adding/removing string
:變更內容添加/移除的文本。
changing lines matching
:變更的行數。 - 檢索條件,用戶輸入想要檢索的內容。
- 檢索方式
Exact
:精確匹配。
IgnCase
:忽略大小寫。
Regexp
:正則表達式匹配。 - 檢索範圍
All fields
:所有範圍。
Headline
:commit的標題。
Comments
:commit的註釋。
Author
:作者。
Committer
:提交者。
5、提交詳情顯示區
顯示commit的變更記錄或兩個commit的diff內容。
1、在頂部可用的工具說明:
-
Search
:可以檢索當前顯示區裏的內容。 -
Diff
:顯示兩個版本的增刪差異。該選項時,最後的Line dif
f,Markup words
,Color words
是按不同樣式顯示diff。 -
Old version
: 顯示舊版本。 -
New version
:顯示新版本。 -
Lines of context
:顯示變更區域的上下文顯示行數,當需要查看更多內容時,可將值設大。 -
Ignore space change
:是否忽略空格變化。
2、在區域的頂部顯示本次提交的信息:
-
Author
:作者。 -
Committer
:提交者。 -
Parent
:當前commit的父節點,當爲Merge節點時會顯示多個Parent,此處爲超鏈,可跳轉到相應的節點。 -
Child
:當前節點的孩子節點,當從該節點新建不同分支時,會有多個Child,此處爲超鏈,可跳轉到相應的節點。 -
Branches
:當前節點最近的HEAD分支,當前提交的分支可跳轉。 (也可以這樣說,與該commit產生關聯的分支是哪些) -
Follows
:當前節點最近的上一個Tag。 -
Precedes
:當前節點最近的下一個Tag,有可能是計劃Tag。 -
Tag
:當前爲tag時會顯示標籤信息。
說明一下Author和Committer的含義
- 每一次的提交既有作者
Author
,還有一個提交人Committer
,爲什麼一次提交,又有作者又有提交人,他們的區別是什麼?- 作者
Author
和提交人Committer
在一次commit
時,大部分的情況下都是一樣的。- 有這麼一種情況,在一個分支中的一個
commit
我很需要,我想把他挑出來,放到我自己開發的分支中,這個過程叫cherry-pick
(就是挑選某一次的commit,放到另外一個分支),Git設計的時候爲了尊重版權,是這樣設計的,你拿來別人的commit
,作者Author
是別人,你修改後進行提交的時候,這個提交者Committer
是你。在這種情況下,就會出現作者Author
和提交人Committer
不同的情況。
6、文件列表顯示區
顯示的 commit的文件列表或兩個commit的diff文件列表。
1、頂部工具說明
-
Patch
:顯示只有變更的文件列表,默認顯示此項。 -
Tree
:顯示全部文件樹,當想查看其他未變更文件內容時,可選擇此項。
2、在文件路徑上右鍵菜單
-
Highlight this too
:當其他文件已經高亮時,如此也想將變更文件包含該文件的commit也高亮,可選擇此項。 -
Highlight this only
:只將變更文件包含該文件的commit高亮顯示。 -
External diff
:使用外部的diff工具查看。 -
Blame Parent commit
:能夠查看該文件的全部內容的變更記錄,並能夠進行切換。 -
Copy path
:拷貝文件路徑。
7、總結
基於這個gitk
圖形化界面,可以做很多的事情
那麼有圖形界面爲什麼還要命令方式行查看版本歷史呢?
- 這個是有原因的,因爲兩種方式各有優缺點,因爲好多開發人員他喜歡用vim這種編輯器來編輯文件內容,他很可能很喜歡用命令行的方式,他們習慣了,所以用命令行的方式效率更高,他可以想要什麼,就用命令指定呈現出來,而且不用切換界面,所以這批人他是很喜歡用命令行方式的。
- 那剩下還有一些很可能是一直操作windows操作系統的圖形界面,習慣了這種圖形化界面展示的,對圖形界面的情有獨鍾。
提示一點:在Git中即使有很多不瞭解,只要不做
push
操作,所有的操作都在本地,基本也沒什麼影響,大不了重新下載整個庫好了。
參考: