6

我正在一个分支(和其他人)关闭主人。

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)

我可以合并回主人的最干净的方法是什么?

  1. 我想保留个人提交(即没有壁球)
  2. 我不会再使用branch-a了,所以提交哈希可以改变。
  3. 如果可能的话,我不想在没有冲突的情况下包含合并提交(例如HL)。

理想情况下,它看起来像这样(假设没有冲突):

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)

本质上,这是一个变基,但省略了不必要的合并提交。

4

2 回答 2

0

当您将 master 合并到您的工作分支时,您可以这样做

 git pull --rebase

当您的提交在您的工作分支上完成并且您希望将代码从 master 拉到您的分支中时。您还可以通过执行将此行为配置为某些分支上的默认行为

git config branch.master.rebase true

这将确保您的提交总是被重新应用,因此您的历史记录是线性的。也就是说,当您最终提出拉取请求时,您的提交将位于顶部,并且历史记录将是干净的,没有不必要的合并提交污染它。另一个优点是,如果您想保持两个或多个分支同步,则更容易挑选。

于 2014-03-10T16:26:23.683 回答
0

您可以通过分支E并将其他提交挑选到新分支中,然后将其合并到master. 变基也是可能的,即做

git rebase C

branch-a。但是,这将从您的功能分支中获取提交master并将它们放在您的功能分支中。

git rebase -i C

具有相同的效果,但允许您跳过您不是来自master且不需要的提交branch-a。Git 通常无法知道提交是否以任何方式交互(例如,对一个文件的更改可能需要对已在 上完成的另一个文件进行更改master),因此对于这个问题没有故障安全的全自动解决方案。

于 2014-03-10T16:09:01.547 回答