更新:
一个更容易使用每个功能的分支的工作流程在这里:http ://dymitruk.com/blog/2012/02/05/branch-per-feature/
(问题的SVN部分最后已经回答)
是的,这是您如何重新引入您取消合并的功能。考虑以下历史(假设您已经“撤消”了合并):
x---x----x--x---x--M--U--L
\ /
x--x--x--x-F
F 是功能分支,M 是合并,U 是当您取消合并该功能时相反,L 是最新提交。
以下是您的选择:
还原 U(无需--force
推动):
x---x----x--x---x--M--U--L--^U
\ /
x--x--x--x-F
将 F 重新设置为 L (然后合并--ff-only F'
)(无需--force
推送):
x---x----x--x---x--M--U--L
\ / \
x--x--x--x-x x'--x'--x'--x'--F'
将 F 重新设置为 L (然后合并--no-ff F'
- 保留您的新分支点)(无需 --force 推送):
x---x----x--x---x--M--U--L-------------------M2
\ / \ /
x--x--x--x-x x'--x'--x'--x'--F'
rebase -i head^^
并从列表中删除 U (--force
需要推送):
x---x----x--x---x--M--L
\ /
x--x--x--x-F
rebase --onto M^1 L^ L
摆脱合并和取消合并。现在您可以稍后重新合并 F。
L'
/
x---x----x--x---x--M--U--L
\ /
x--x--x--x-F
要压缩所有功能提交,请--squash
在初始合并上使用修饰符。我会让你的想象力来研究历史上的样子。我不建议这样做是有原因的。了解您如何使某个功能发挥作用以及它采取了哪些步骤是有价值的。后续合并会更容易,因为 Git 可以检查某个文件为何看起来如此的历史记录。将提交压缩在一起会丢失该信息。
还有一些额外的缺点可能会或可能不会影响您利用 rerere 历史记录的能力。
我建议始终在 master 中使用空白合并标记发布的内容。这是通过与--no-ff
选项合并来完成的。您永远不会在 master 上工作,并且唯一完成的提交就是那些合并 - 没有代码更改提交。在 QA 分支中,您标记标记您发布时间点的提交。所以当你这样做时git merge --no-ff rc-12.2
,你会自动生成一个提交注释“merged rc-12.2”。
查看 git-flow。
希望为您提供更多详细信息。