【问题标题】:How does 'git merge' is supposed to work in this situation'git merge' 在这种情况下应该如何工作
【发布时间】:2019-09-02 11:41:56
【问题描述】:

在我们正在进行的项目中,我发现了一个让我感到困惑的“git 合并”交互。我想对此有一些见解。

我们有一个项目正在被 git 跟踪。我们有主要的开发分支'develop',从这个分支有一个具有一些新功能'a'的分支

'develop' 已经提交了一些其他功能,这些功能也已在 'a' 上毫无问题地合并,以保持双方的“最终”更改

在某些时候,我们启动了一个新功能“b”,它错误地从“a”分支而不是“开发”。开发完成后,'b' 合并为 'develop' 和 'a' 没有问题(至少我在 git log 上看不到它们)

在这个 'develop' 得到了一个从 'develop' 分支出来的新功能之后,但现在当我尝试将它合并到 'a' 中时,我发现它好像我们删除了在 'a' 中完成的每一个提交它的起源直到我们最后一次合并'b'的那一刻

我知道从 'a' 而不是 'develop' 分支存在一个巨大的错误,但我无法理解它的行为

我只是想知道是否有人可以解释这背后的原因 提前致谢

【问题讨论】:

  • 正在使用什么合并策略。您可能不小心将策略设置为偏爱一方而不是另一方,因此松散了“他们的”(几年前已被弃用并被删除为“坏事”)
  • 你怎么知道提交被删除了。你的意思是他们的差异不存在,或者日志没有列出它们。你的意思是你有'历史简化',它只是说“这里没什么可看的,它已经包括在内了。继续前进”
  • 好吧,我所看到的(因此认为是这样的)是因为它发生了冲突,当我检查合并中涉及的文件时,有很多代码删除仅来自新功能分支(又名“a”),但到目前为止他们从未“开发”过,因此不可能进行这种交互。
  • 另一方面,我最近看到情况更加复杂,因为他们将'b'合并到另一个来自develop的分支上,然后再次直接与develop合并......真是一团糟...... . 我结束了在一个真正干净的分支上挑选提交并从头开始重新开始所有这些东西
  • 我已经更新了我的答案,添加了一些指向git-scm.com/docs/git-log#_history_simplification 和另一个 SO Q&A 的链接

标签: git merge branch


【解决方案1】:

我在 git log 上看不到它们

这就像我们删除了在“a”中完成的每一个提交,从它的起源直到我们最后一次合并“b”的那一刻

我认为您实际上看到了“历史简化”,它只是在说“这里没什么可看的,它已经包含在内。继续前进”。这是您将开发合并回功能分支的结果。


参见https://git-scm.com/docs/git-log#_history_simplification(尤其是关于default 简化的部分) 还有Git log history simplification, elaborations example in git log's manual

【讨论】:

  • 不确定是不是这种情况。我没有进行合并然后查看日志,当我尝试合并时它有冲突,所以我正在比较来自合并冲突的文件。据我所知,我可以检查合并正在进行哪些更改,我发现的第一件事是删除了一个分支的几乎所有更改
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 2011-02-27
  • 2018-06-16
  • 2017-06-21
相关资源
最近更新 更多