【问题标题】:How to do continous merge in Git如何在 Git 中进行连续合并
【发布时间】:2012-03-01 21:11:01
【问题描述】:

在 svn 中,我可以通过像这样指定修订号来从分支合并到主干

trunk>svn merge -r r1:r2 <branch>

但是,在 git 中,似乎合并始终是重新集成合并,它将分支收敛到主干。因此,之后如果再次合并,则更改将不会基于上一次合并发生的点。

   B--C----E----F-----G     --> origin/dev
  /    \               \
 /      \               \
A--------D---------------H------- origin/master

所以,当第一次在 D 处从 dev 合并到 master 时,它肯定是正确的。但是第二次从 G 合并回 H 时,合并的比较点基于 C 而不是 D,因为 D 处的合并最初是重新合并合并,我遇到了一些冲突!

那么,如何在 Git 中进行连续合并?

【问题讨论】:

  • 我不明白你的问题。在第二次合并中无需将提交 B 和 C 合并回 master,它们已经应用于 master。第二次合并只需要合并E、F和G即可。总有合并冲突的可能,这取决于两个分支的变化是什么。
  • e,f,g如何合并,用什么命令?
  • 您结帐大师,确保它与 origin/master 是最新的,然后只需执行git merge origin/dev。然后,如果您对合并感到满意,您只需使用 git push origin master 将其推送到原点。
  • 为什么第二次可能包含冲突?这是没有意义的,因为在第一次合并后没有向 master 提交任何更改。你所做的正是我所做的,但是,它会导致冲突。这就是为什么我猜 git 不做连续合并的原因。
  • 即使在 D 之后没有对 origin/master 的非合并提交,那么在 origin/dev 中合并仍然存在冲突,因为提交 E-G 可能会触及 C 和 D 之间不同的文件,因为它们有在 A 和 D 之间进行了更改。这些更改不会出现在 origin/dev 分支上,只会出现在 origin/master 分支上。

标签: git svn merge


【解决方案1】:

在这种情况下,“比较点”不是 A,实际上是 C,因为那是你的分支分歧的地方。突然之间,这一切都变得有意义了。

【讨论】:

  • 但是……这已经是答案了。从 C 开始,你有两个不同的分支,A 不再重要,所以 H 只是一个正常的合并。
  • 如果我想保留dev分支进行开发并合并到主干进行QA发布,如何进行持续合并?我需要能够不断地从 dev 中合并,而无需每次都删除 dev 并重新创建 dev。
  • @sza:你可以这样做。是什么让你认为你做不到?
  • @sza,合并吧!只要您认为合适,您就可以毫无问题地将dev 合并到master! Git 知道已经合并了什么,您不必像使用 Subversion 那样指定应该合并哪些提交。
  • @bombe 会导致冲突(D之后没有新的冲突被推送到master)这就是为什么我猜git不做连续合并的原因。
猜你喜欢
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 2011-05-12
  • 2015-12-01
  • 1970-01-01
相关资源
最近更新 更多