我正在与主人一起工作(和其他人一起)。
A - B - C - F - G (master)
\
D - E (branch-a)
我们会定期将master合并到分支中,以便以后最大限度地减少冲突。
A - B - C - F - G (master)
\ \
D - E - H (branch-a)
最终,我们希望合并回来。
A - B - C - F - G - I - K - M - N (master)
\ \ \ /
D - E - H - J - L - O (branch-a)
我可以合并回主人的最简洁方法是什么?
branch-a
,因此提交哈希值可能会发生变化。H
,L
),以便在没有冲突的情况下进行合并。理想情况下,它看起来像这样(假设没有冲突):
A - B - C - F - G - I - K - M - N (master)
\ /
D - E - J - O
关于如何做到这一点的任何想法?
(仅供参考,这是关于我的工作流程的问题。如果我之前应该做其他事情,这也是一个合理的答案。)
更新
在考虑了这个之后,我意识到这通常是不可能的。
例如,如果J
更改了G
更改的行,则无法获取该历史记录。
下一个最好的选择是拥有这段历史:
A - B - C - F - G - I - K - M - D - E - J - O (master)
基本上,这是一个rebase,但省略了不必要的合并提交。
答案 0 :(得分:0)
您可以手动执行此操作,方法是将E
分开并将其他提交挑选到新分支中,然后将其合并到master
中。重新定位也是可能的,即做
git rebase C
<{1>} branch-a
。但是,这将从master
提交并将它们放在您的功能分支上。
git rebase -i C
具有相同的效果,但允许您跳过不属于master
的提交,branch-a
不需要提交。 Git通常无法知道提交是否以任何方式进行交互(例如,对一个文件的更改可能需要更改master
上执行的不同文件),因此没有故障安全,全自动解决此问题的方法
答案 1 :(得分:0)
将master合并到工作分支时可以执行此操作
git pull --rebase
在您的工作分支上完成提交并且您希望将代码从master提取到您的分支中。您还可以通过执行
将此行为配置为某些分支上的默认行为git config branch.master.rebase true
这将确保您的提交始终重新应用,因此您的历史记录显示为线性。也就是说,当你最终提出拉取请求时,你的提交将位于顶部,并且历史记录将是干净的,没有不必要的合并提交污染它。另一个优点是,如果您想要保持两个或多个分支同步,则更容易挑选。