一文讓你明白 Git 分支是如何工作的
導讀 | 分支是 Git 版本跟蹤的核心功能,並且經常被使用相同軟體程式碼庫的團隊使用。我們將深入研究它們如何在幕後工作,以及如何使用它們來改進 Git 工作流程。 |
分支用於拆分 Git 歷史記錄。您可以將 Git 提交想象成一系列可以追溯到過去的更改。您可以“簽出checkout”任何這些提交,並將本地目錄及時移回提交時的狀態。
分支通常用於處理實驗性功能,或需要一段時間的更改,或任何其他可能破壞儲存庫的東西。例如,您可能正在重構程式碼庫的一個重要元件,並且在完成之前,您希望master 分支保持穩定。
一旦新feature 分支穩定了,它就可以重新合併到master中,通常是透過 拉取請求,這是一個允許在進行更改之前進行程式碼審查和測試的過程。
然而,在幕後,分支的工作方式與您最初預期的略有不同。在 Git 中,分支只是指向特定提交的標籤或指標。就是這樣,master 分支只是指向最新的提交master;當您進行新的提交時,標籤會更新為指向新的提交。
雖然將提交視為及時推進是有用的;實際上,Git 提交指向彼此。每個提交都有對最後一次提交的引用,並且這個鏈用於構造儲存庫的狀態。
但是,如果您建立一個新分支,則情況會有所不同。您簽出的任何分支(使用git checkout )都將用作新提交的標籤。
要在此示例中建立分支,您必須首先確保將儲存庫 HEAD 設定為master 分支。這是因為您實際上可以從任何地方開始建立分支——包括過去的提交或其他分支上的提交。
git checkout master
然後建立一個新分支,並交換到它:
git branch feature git checkout feature
此時,您的儲存庫中的任何內容都沒有改變。feature 和分支標籤都master 指向同一個提交。
但是,您從此時開始提交的任何內容都將新增到feature 分支中。更具體地說,將建立一個新提交,設定為指向當前提交,並且“功能”標籤將更新為指向這個新提交。
您甚至可以checkout master 在主分支上進行更多提交。它不會影響feature 分支,因為標籤所知道的只是它指向那個特定的提交。它不會隨master 標籤更新。
當然,如果分支永遠卡在那裡,它們就不會太有用了,因此 Git 提供了將它們合併回master 分支的工具。從技術上講,只要歷史相容,您就可以將子分支合併到任何其他分支中。
最簡單的情況是您有一個只需要合併回來的簡單分支。您可以簽出master 分支,然後執行git merge feature 以將在功能分支上所做的所有提交“重播”到 master 上。
這會將它們合併到主時間線中,並使用更改建立一個新的“合併提交”。
但它並不總是那麼簡單,而且在許多情況下,您將遇到 需要解決的合併衝突。這可能包括分支修改檔案中的相同行、檔案移動或刪除,或feature 在建立分支後更改軟體時出現的其他型別的錯誤。
如果您有一個長時間執行的feature 分支,則將這個問題最小化的一種方法是執行頻繁的合併,這次相反——從master 主支到 feature 分支上,這保持feature 最新,雖然它並沒有真正減少所需的工作量,但它可以防止它陷入一片混亂。
這種策略對於長期存在的分支很常見,通常被認為是 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一文讓你明白Redis持久化(RDB、AOF)Redis持久化
- Git分支工作流程Git
- 3分鐘讓你明白JSON是什麼JSON
- 4句話讓你明白什麼是AIAI
- 不切換 Git 分支,卻能同時在多個分支上工作,我是怎麼做到的?Git
- Git(12)-- Git 分支 - 分支簡介Git
- 一個對話讓你明白架構師是做什麼的?架構
- Python函式每日一講 - 一文讓你徹底明白hasattr函式的使用Python函式
- Python函式每日一講 - 一文徹底讓你明白hash函式的使用Python函式
- Git分支的作用Git
- 查詢git某個分支是誰建立的Git
- Git 操作——如何刪除本地分支和遠端分支Git
- git分支Git
- 你知道SSL是如何工作的嗎?
- Git 如何同步上游分支程式碼?Git
- Git 分支 - 分支的新建與合併Git
- 你對Git的branch及工作流的理解是什麼?Git
- Git如何撤銷某次分支的合併MergeGit
- 成熟的 Git 分支模型Git模型
- Git修改分支的名字Git
- Git如何確定當前所在分支Git
- 如何克服解決Git衝突的恐懼症?(Git分支策略)Git
- 5分鐘讓你明白HTTP協議HTTP協議
- 揭秘Git高手的10個秘密武器:讓你的工作效率飆升!Git
- 一文讀懂git核心工作原理Git
- git分支操作Git
- Git 分支管理Git
- Git 分支操作Git
- Git 使用分支Git
- Nginx 是如何讓你的快取延期的Nginx快取
- 團隊如何選擇合適的Git分支策略?Git
- 【git】前端使用git分支的開發流程Git前端
- 圖解git,用手繪圖帶你理解git中分支的原理和應用圖解Git繪圖
- “雲端計算”工作是如何讓企業受益的?
- [Tips] git init如何指定主分支名稱Git
- 如何更優雅地切換 Git 分支Git
- Git——分支管理(2)Git
- git合併分支Git