【學了就忘】Git操作 — 59.圖形界面工具來查看版本歷史

gitk工具是Git提供的一個GUI工具,可以很清晰地查看和搜索版本庫中的提交歷史,以及支持對Gi的t相關操作。在Git本地版本庫目錄下直接輸入gitk命令即可查看當前分支的。

這個工具不用特殊的安裝,一定要進入某一個倉庫中,在git終端,執行gitk命令就能使用了。

前提:一定要進入某一個倉庫中,並且這個倉庫中有Git日誌,否則執行Gitk會提示Cannot find a git repository here.

1、Gitk頁面的佈局

先看一下Gitk全局頁面,如下圖:

Gitk頁面中包含5個部分:

  1. 主菜單欄。

  2. 提交信息顯示區:顯示提交的基本信息,包括提交的版本分支視圖、message、提交人、提交時間和對應提交的SHA1-ID

  3. 查詢檢索區:在文本框中輸入需要查找的檢索信息,並且從左邊和右邊的下拉框中,選擇相應類型,幫助我們快速精確的定位到要查找的信息,可按提交人等類型查找提交記錄。

  4. 提交詳情顯示區:顯示提交的詳細信息。

  5. 文件列表顯示區:可以顯示提交中包含的文件列表。

    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...新建視圖,進行自定義配置,並保存視圖。

下面介紹一寫查詢條件的設置:

  1. references(space separated list):可以指定一個refs,可以是tag,branch,下面還可以選擇All xxx。
  2. commit info(regular expressions):可以指定提交信息的Author、Committer、Message作爲查詢條件。
  3. Changes to Files:可以指定修改的文件內容作爲查詢條件,可以是固定的文本,也可以是正則表達式。
  4. Commit Date:可以指定時間範圍作爲查詢條件。
  5. Limit and/or skip a number of revision:可以指定只顯示revision(修訂版)數量,或者可以從頭跳過一定數量的revisions,值爲正整數。
  6. miscellaneous options:其他選項,比如:按時間排序,標記分支側,限制只顯示第一個parent,簡單歷史顯示。還可以使用其他 git log 命令參數。
  7. Enter files and directories to include,one per line:可以指定一些文件或目錄,每行一個。
  8. 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->selectedDiff selected ->thisMake patch這幾個需要2個commit進行對比,此時爲灰色。

  • Return to markFind descendant of this and markCompare with marked commitDiff this->marked commitDiff 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這一行有幾個區域:

  1. Find ↑↓ commit:當根據檢索條件檢索出結果後,通過上下箭頭切換不同的commit。
  2. 檢索類型列表

    containing:包含。與後面的範圍配合使用。
    touching paths:文件路徑。
    adding/removing string:變更內容添加/移除的文本。
    changing lines matching:變更的行數。
  3. 檢索條件,用戶輸入想要檢索的內容。
  4. 檢索方式

    Exact:精確匹配。
    IgnCase:忽略大小寫。
    Regexp:正則表達式匹配。
  5. 檢索範圍

    All fields:所有範圍。
    Headline:commit的標題。
    Comments:commit的註釋。
    Author:作者。
    Committer:提交者。

5、提交詳情顯示區

顯示commit的變更記錄或兩個commit的diff內容。

1、在頂部可用的工具說明:

  • Search:可以檢索當前顯示區裏的內容。
  • Diff:顯示兩個版本的增刪差異。該選項時,最後的Line diff,Markup wordsColor 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操作,所有的操作都在本地,基本也沒什麼影響,大不了重新下載整個庫好了。

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章