在 Git 中重新附加頭部

Abdul Jabbar 2022年4月22日
在 Git 中重新附加頭部

Git 倉庫可以定義為一組物件和引用。分支是我們用來展示我們工作的物件。Git 還處理引用特定分支中提交的標籤。

commit 可能是原始碼在某個時間點使用的狀態。Commits 包括父輩和子輩,以及關於誰建立了提交以及何時建立的完整資料。提交作為分支中的物件放置在倉庫中。

HEAD 引用指向當前分支中最新的最後一次提交。HEAD 指標是對當前簽出分支的引用,它指向分支的頂部。

但是,你可以在不簽出分支的情況下及時返回。你可以使用 HEAD 指標來抓取分支中的任何提交,然後你可以使用索引輕鬆抓取檔案的任何版本。

你可以使用 HEAD 指標和索引指標對 Git 中稱為 分離 HEAD 狀態的特定提交執行簽出。此外,你可以簽出特定提交併根據分支中的特定提交建立新分支。

如果我們只是偶爾這樣,這不會成為問題。但是,如果我們重複很多次,我們很快就會開始想知道如何回到我們正在處理的那個分支。

解決方法很簡單,在我們簽出一個分支之前,我們應該使用命令 git checkout master。此命令將我們帶回到提交完成之前我們正在處理的分支,但它不會影響我們正在檢查的提交。

一個乾淨的解決方案是建立一個新的 Git 倉庫,專門用於儲存補丁系列,並使其可供其他人隨時提取最新的分支。

這些情況非常罕見,以至於實現分離 HEAD 的可用性和效能成本超過了它們的好處,因此 Git 目前缺乏此功能。Git 可以修改提交。但是,不可能修改分離的 HEAD 上的最後一次提交。

Git 有一種方法來永久刪除提交,方法是建立一個祕密分支,在該分支中記錄提交資料,然後從 HEAD 永久刪除提交。但是,此功能僅在單個提交與 HEAD 分離時可用。如果一個提交有多個父級,則不可能從該分支中​​刪除它。

Git 中的頭部分離

但是,當我們切換到另一個分支時,情況就不同了。如果我們檢查了我們的工作目錄,它會更新為 HEAD,我們不能再修改其中的檔案,或者如果它們與我們切換到的分支不衝突,我們可以建立一些新的更改。

在這種情況下,HEAD 與當前分支分離。同時,我們可以使用 git checkout 命令更改分支,而無需將工作目錄更新為 HEAD,因此 HEAD 可以在附加的同時分離。

這很令人困惑,但如果我們想要在不快速接觸工作目錄的情況下在分支之間切換或切換到不同的分支並同時簽出新的工作目錄時,它會派上用場。我們可以使用 git checkout -b <newbranchname> <commit> 來執行此操作。

我們可以這樣執行;只需檢查我們想要的分支。

$ git checkout <branch>

例如:

$ git checkout master

如果我們想保留我們正在處理的更改,我們應該建立一個新分支或將我們的更改儲存在分支中。任何不能成為我們分支名稱的最近提交的簽出都會給我們一個分離的 HEAD。

HEAD 分離時,提交看起來很正常,除了沒有更新命名分支。它就像一個未知的分支。例如,我們可以說,如果我們先檢查一個遠端分支,然後再跟蹤它;最終,我們將得到一個分離的 HEAD

Author: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

相關文章 - Git Head