一文讓你明白 Git 分支是如何工作的

大雄45發表於2022-04-02
導讀 分支是 Git 版本跟蹤的核心功能,並且經常被使用相同軟體程式碼庫的團隊使用。我們將深入研究它們如何在幕後工作,以及如何使用它們來改進 Git 工作流程。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

什麼是分支?

分支用於拆分 Git 歷史記錄。您可以將 Git 提交想象成一系列可以追溯到過去的更改。您可以“簽出checkout”任何這些提交,並將本地目錄及時移回提交時的狀態。

分支通常用於處理實驗性功能,或需要一段時間的更改,或任何其他可能破壞儲存庫的東西。例如,您可能正在重構程式碼庫的一個重要元件,並且在完成之前,您希望master 分支保持穩定。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

一旦新feature 分支穩定了,它就可以重新合併到master中,通常是通過 拉取請求,這是一個允許在進行更改之前進行程式碼審查和測試的過程。

然而,在幕後,分支的工作方式與您最初預期的略有不同。在 Git 中,分支只是指向特定提交的標籤或指標。就是這樣,master 分支只是指向最新的提交master;當您進行新的提交時,標籤會更新為指向新的提交。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

雖然將提交視為及時推進是有用的;實際上,Git 提交指向彼此。每個提交都有對最後一次提交的引用,並且這個鏈用於構造儲存庫的狀態。

但是,如果您建立一個新分支,則情況會有所不同。您簽出的任何分支(使用git checkout )都將用作新提交的標籤。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

要在此示例中建立分支,您必須首先確保將儲存庫 HEAD 設定為master 分支。這是因為您實際上可以從任何地方開始建立分支——包括過去的提交或其他分支上的提交。

git checkout master

然後建立一個新分支,並交換到它:

git branch feature
git checkout feature

此時,您的儲存庫中的任何內容都沒有改變。feature 和分支標籤都master 指向同一個提交。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

但是,您從此時開始提交的任何內容都將新增到feature 分支中。更具體地說,將建立一個新提交,設定為指向當前提交,並且“功能”標籤將更新為指向這個新提交。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

您甚至可以checkout master 在主分支上進行更多提交。它不會影響feature 分支,因為標籤所知道的只是它指向那個特定的提交。它不會隨master 標籤更新。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

合併和變基(Merging 和 Rebasing)

當然,如果分支永遠卡在那裡,它們就不會太有用了,因此 Git 提供了將它們合併回master 分支的工具。從技術上講,只要歷史相容,您就可以將子分支合併到任何其他分支中。

最簡單的情況是您有一個只需要合併回來的簡單分支。您可以簽出master 分支,然後執行git merge feature 以將在功能分支上所做的所有提交“重播”到 master 上。

這會將它們合併到主時間線中,並使用更改建立一個新的“合併提交”。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

但它並不總是那麼簡單,而且在許多情況下,您將遇到 需要解決的合併衝突。這可能包括分支修改檔案中的相同行、檔案移動或刪除,或feature 在建立分支後更改軟體時出現的其他型別的錯誤。

如果您有一個長時間執行的feature 分支,則將這個問題最小化的一種方法是執行頻繁的合併,這次相反——從master 主支到 feature 分支上,這保持feature 最新,雖然它並沒有真正減少所需的工作量,但它可以防止它陷入一片混亂。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

這種策略對於長期存在的分支很常見,通常被認為是 Git 的最佳實踐。

在這種情況下也使用的另一個工具是變 基。基本上,變基就像拿起整個分支並將其移動到從新位置開始,通常是儲存庫中的最新提交。在某些情況下,這會導致更清晰的 Git 歷史記錄,並且是某些複雜情況的首選解決方案。

一文讓你明白 Git 分支是如何工作的一文讓你明白 Git 分支是如何工作的

然而,Git 歷史是“不可變的”,並且由於這種變基複製提交而不是實際移動它們。如果沒有與您的團隊正確協調,這可能會導致共享分支上的許多問題——如果您重新設定基準,並且您的同事在“舊”、現已刪除的功能分支上進行新提交,它將被擱置。他們將不得不隱藏提交併將其彈出到新分支以協調更改。

如何使用分支?

要開始建立新分支,您需要將儲存庫置於正確狀態,以便新分支標籤從您想要的位置開始。如果您要從 分支master,只需簽出整個分支以從最新提交開始。否則,您可以通過簽出單個提交將您的 repo 置於分離的 HEAD 狀態。

git checkout master
git checkout aa3e570923b8ee61414cec17d9033faab4f084a6

然後,您可以建立新分支,並使用checkout切換到它:

git branch feature
git checkout feature

這可以在一個 中完成,帶有-b 結帳標誌:

git checkout -b feature

此時,您的 repo 中所做的任何提交都將提交到新分支。

如果您需要再次交換分支,只需執行git checkout master 即可恢復正常。

如果您有需要移動的本地更改,可以將它們放入git stash. 更改將被儲存,並且可以在交換分支後重新應用。

git stash  
git checkout feature
git stash apply

 

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2885456/,如需轉載,請註明出處,否則將追究法律責任。

相關文章