【整理】【Learn Git Branching】02 高階篇

【整理】【Learn Git Branching】02 高階篇

在提交樹上移動
在接觸 Git 更高階功能之前,我們有必要先學習在你專案的提交樹上前後移動的幾種方法。

一旦熟悉瞭如何在 Git 提交樹上移動,你駕馭其它命令的能力也將水漲船高!

HEAD

我們首先看一下 “HEAD”。 HEAD 是一個對當前檢出記錄的符號引用 —— 也就是指向你正在其基礎上進行工作的提交記錄。

HEAD 總是指向當前分支上最近一次提交記錄。大多數修改提交樹的 Git 命令都是從改變 HEAD 的指向開始的。

HEAD 通常情況下是指向分支名的(如 bugFix)。在你提交時,改變了 bugFix 的狀態,這一變化通過 HEAD 變得可見。

這裡寫圖片描述

分離的 HEAD

這裡寫圖片描述

想完成此關,從 bugFix 分支中分離出 HEAD 並讓其指向一個提交記錄。

通過雜湊值指定提交記錄。每個提交記錄的雜湊值顯示在代表提交記錄的圓圈中。

相對引用

通過指定提交記錄雜湊值的方式在 Git 中移動不太方便。在實際應用時,並沒有像本程式中這麼漂亮的視覺化提交樹供你參考,所以你就不得不用 git log 來查檢視提交記錄的雜湊值。

並且雜湊值在真實的 Git 世界中也會更長(譯者注:基於 SHA-1,共 40 位)。例如前一關的介紹中的提交記錄的雜湊值可能是 fed2da64c0efc5293610bdd892f82a58e8cbc5d8。舌頭都快打結了吧…

比較令人欣慰的是,Git 對雜湊的處理很智慧。你只需要提供能夠唯一標識提交記錄的前幾個字元即可。因此我可以僅輸入fed2 而不是上面的一長串字元。

正如我前面所說,通過雜湊值指定提交記錄很不方便,所以 Git 引入了相對引用。這個就很厲害了!

使用相對引用的話,你就可以從一個易於記憶的地方(比如 bugFix 分支或 HEAD)開始計算。

相對引用非常給力,這裡我介紹兩個簡單的用法:

使用 ^ 向上移動 1 個提交記錄
使用 ~<num> 向上移動多個提交記錄,如 ~3

這裡寫圖片描述

這裡寫圖片描述

“~”操作符

如果你想在提交樹中向上移動很多步的話,敲那麼多 ^ 貌似也挺煩人的,Git 當然也考慮到了這一點,於是又引入了操作符 ~。

該操作符後面可以跟一個數字(可選,不跟數字時與 ^ 相同,向上移動一次),指定向上移動多少次。咱們還是通過實際操作看一下吧
這裡寫圖片描述

強制修改分支位置

你現在是相對引用的專家了,現在用它來做點實際事情。

我使用相對引用最多的就是移動分支。可以直接使用 -f 選項讓分支指向另一個提交。例如:

git branch -f master HEAD~3

上面的命令會將 master 分支強制指向 HEAD 的第 3 級父提交。
這裡寫圖片描述

撤銷變更

在 Git 裡撤銷變更的方法很多。和提交一樣,撤銷變更由底層部分(暫存區的獨立檔案或者片段)和上層部分(變更到底是通過哪咱方式被撤銷的)組成。我們這個應用主要關注的是後者。

主要有兩種方法用來撤銷變更 —— 一是 git reset,還有就是 git revert。接下來咱們逐個進行講解。

Git Reset
這裡寫圖片描述

Git Revert

雖然在你的本地分支中使用 git reset 很方便,但是這種“改寫歷史”的方法對大家一起使用的遠端分支是無效的哦!

為了撤銷更改並分享給別人,我們需要使用 git revert。來看演示:

git revert HEAD
這裡寫圖片描述

原專案網址

http://learngitbranching.js.org/