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 分支。

我們在 other-branch 上的提交 E 與 master 分支上的提交 A 合併。因此,我們可以說提交 A 有兩個父提交。
因此,父提交只是提交的先前提交。
請看下面的命令。
$ git show HEAD^ --oneline
如果我們在提交 A,執行上面的命令會將我們的 HEAD 移動到提交 B。
$ git show HEAD^2 --oneline
另一方面,上面的命令會將我們的 HEAD 轉移到提交 E。
請注意,HEAD^ 和 HEAD^1 的用途相同。
值得注意的是,上面的解釋只適用於我們合併了分支的情況。如果你正在使用一個分支,那麼 HEAD^將等同於 HEAD~。
Git HEAD~ (波浪號)
在我們分支中最後一次提交的上一次提交處的 HEAD 點新增一個波浪號。這就像直線返回。
讓我們看一個例子。

因此,如果我們的 HEAD 在提交 A,那麼 git HEAD~或 git HEAD~1 將把我們轉移到提交 B。HEAD~2 將轉移我們提交 C。
如果我們在 other-branch 的提交 E 處簽出,HEAD~1 會將我們轉移到提交 F 等等。
Git HEAD{@}
這種組合指向我們本地儲存庫中特定時間的引用位置。它通常在執行 git reflog 命令時彈出,如下所示。

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