![](/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.