![](/img/trans.png)
[英]git: how do I configure tracking a branch by merging and not by rebasing?
[英]How do I manage merging and rebasing in git?
我給出了rebase的目的。 對於我,這說得通。 基本上我有一個我正在研究的功能分支,我准備把它放到主分支中我會做一個rebase來將我的所有提交壓縮成一個干凈的一個,這樣它就可以很容易地集成到master中而不會讓所有的混亂歷史。 對?
這就是我們一直在做的事情。
我看到的問題是,定期將master合並到功能分支會導致重新定位時出現問題,因為現在我的功能簽入中混合了一堆主分支簽到。
這里的工作流程是什么? 以下逗號在哪里發揮作用:
在分支的生命周期結束時,您應該只與主服務器合並一次。 功能/主題分支的想法是它只包含與功能相關的更改; 當你反復合並master時,你會失去它。 (你可以讀一下git維護者Junio Hamano對分支的看法。)
你可以做一個“練習”合並,你將扔掉,並使用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以獲取其他教程。
您還可以定期在master上重新分配主題分支,然后在最后進行合並。
為了處理你當前所處的情況,使用一個主題分支(比如命名feature
),其中包含一系列與main混合的各種正在進行的提交,最簡單的方法是將一個壓縮合並到生成一個“合並”的工作樹,然后在main上創建一個新的提交(或一系列提交)。 例如:
git checkout master
git merge --squash feature
git commit
這將生成一個提交,表示功能頭部的樹狀態,合並為主。
當然,你也可以做一個定期的合並,以master
這種變化,留下的凌亂的歷史feature
現在,只是在今后的工作中更加干凈。 例如,簡單地說
git checkout master
git merge feature
然后繼續前進。
如果你要改變(我建議你這樣做),那么就不要與master合並。 rebase工作流基於以下想法:主題分支包含從主要到新要素的路徑,而不包含任何其他內容。 當主人向前移動時,你對新功能的改變隨之移動。
當您最終准備好將更改帶入master時,您有兩個主要選項:
最后一次重新掌握master,然后進行正常的快進合並,這實際上將你所有分支的提交逐個引入master。 這保留了更細粒度的歷史記錄,但如果中間提交破壞了構建,那么您可能更願意壓縮它們。 交互式rebase(-i)可以幫助安排這些提交。
使用merge --squash在master中進行單個提交,其中包含所有分支的更改。
無論如何你要重新定義分支,只要你想要“合並”變化,就可以進行重新定義。在准備好將該分支“合並”為主分支之前,你不必重新加注。
我相信簡短的回答是:
使用git merge --squash
if:
如果您有一個功能分支,並且在工作時從另一個分支進入該分支,例如,您切換到功能並定期運行git merge master以在主分支中合並。 或者你正在把那個分支拉到或推到別人或像github這樣的中央倉庫。
使用git rebase
如果:
如果你有一個功能分支,你沒有推或拉給別人,你沒有定期合並另一個分支,如上所述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.