HOWTO · Git

Git HEAD^ vs Git HEAD~ vs Git HEAD{@}

在本文中,我們將討論 Git 插入符號和 Git 波浪號之間的區別。

本文將討論 Git 插入符號和 Git 波浪號之間的區別。Git 插入符號用^ 表示,而波浪號用~ 表示。

我們還將討論 HEAD{@}。讓我們直接開始。

Git HEAD^ (插入符號)

當向 Git HEAD 引入插入符號時,我們指向提交的第一個父項。因此 git HEAD^2 指向提交的第二個父項。

提交的父級是什麼?

當我們將一個或多個分支與另一個合併時,提交的父級就會發揮作用。讓我們看一個例子。

我們的 repo 有綠色的 Master 分支和黃色的 Other-Branch 分支。

git HEAD ^

我們在 other-branch 上的提交 Emaster 分支上的提交 A 合併。因此,我們可以說提交 A 有兩個父提交。

因此,父提交只是提交的先前提交。

請看下面的命令。

$ git show HEAD^ --oneline

如果我們在提交 A,執行上面的命令會將我們的 HEAD 移動到提交 B

$ git show HEAD^2 --oneline

另一方面,上面的命令會將我們的 HEAD 轉移到提交 E

請注意,HEAD^HEAD^1 的用途相同。

值得注意的是,上面的解釋只適用於我們合併了分支的情況。如果你正在使用一個分支,那麼 HEAD^將等同於 HEAD~

Git HEAD~ (波浪號)

在我們分支中最後一次提交的上一次提交處的 HEAD 點新增一個波浪號。這就像直線返回。

讓我們看一個例子。

git HEAD ~

因此,如果我們的 HEAD 在提交 A,那麼 git HEAD~git HEAD~1 將把我們轉移到提交 BHEAD~2 將轉移我們提交 C

如果我們在 other-branch 的提交 E 處簽出,HEAD~1 會將我們轉移到提交 F 等等。

Git HEAD{@}

這種組合指向我們本地儲存庫中特定時間的引用位置。它通常在執行 git reflog 命令時彈出,如下所示。

git reflog 命令

簡而言之,當我們在其他分支上合併分支時,插入符號很有用,我們需要切換到不同分支中的提交。波浪號允許我們切換到特定分支中最後一次提交的前一次提交。

在單個分支上工作時,HEAD^HEAD~ 相同。