在分支的生命週期結束時,您應該只合並一次/從主人。特徵/主題分支的想法是它只包含與特徵相關的更改;當你重複在主人合併時,你會失去這一點。 (你可以閱讀什麼Junio Hamano, the git maintainer, says about branches。)
你可以做一個「練習」合併,你會扔掉,並使用git-rerere
讓Git自動記錄你的合併決議,以便他們可以重新使用,當你真的準備合併。有關背景和教程,請參閱http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html。這非常酷,因爲它可以讓你完成合並工作,而無需明確地提交它,然後當你準備好創建合併時,「神奇地」恢復工作。所以,在最後,你可以做一堆更小,希望更簡單,中間的「練習」合併,而不是一個最大的痛苦合併。粗略地說:
# Enable rerere
git config --global rerere.enabled 1
# Start a feature branch
git checkout -b feature
# Hack hack hack
git commit
git commit
# Practice merge
git merge master
# ...then throw the merge commit away, the work is saved by rerere
git reset --hard HEAD^
# Hack hack hack
git commit
# Really merge to master, reusing any saved work from rerere
git checkout master
git merge feature
git branch -d feature
另請參閱http://progit.org/2010/03/08/rerere.html另一個教程。
您還可以定期重新綁定主分支上的主題分支,然後在最後進行合併。
爲了處理一個像你目前所在的情況,與一個主要分支(稱爲feature
),有一系列合併主要與各種正在進行的提交混合,最簡單的方法是做壓縮合併產生一個「合併」工作樹,然後創建一個新的提交(或一系列提交)到main。例如:
git checkout master
git merge --squash feature
git commit
這將產生一個單一提交表示所述樹中的特徵的頭部的狀態下,合併到主站。
當然,您也可以對此更改定期合併爲master
,留下當前feature
的混亂歷史,並且在將來更加乾淨地工作。例如,只需要
git checkout master
git merge feature
然後繼續。
現在我更加困惑。我從來沒有聽說過git-rerere。我閱讀手冊頁,它有道理,但我失去了如何工作。所以重新綁定不僅可以壓縮提交,還可以將原始分支向前移動?我很困惑。我應該在這裏採用什麼樣的實際流程?尤其對於長時間運行的分支 – Micah 2010-12-02 16:59:06