【问题标题】:Git: does ffwd merge preserves all topic branch commits?Git:ffwd 合并是否保留所有主题分支提交?
【发布时间】:2012-06-04 04:16:53
【问题描述】:

假设我们有这种情况:

       master
         |
A--B--B--D--E--F--G
                  |
                test

然后我们将 test 合并到 master 中。提交 E 和 F 是否保留在新的 master 分支中?

也就是说,它现在看起来像这样吗(选项 A):

                master
                  |
A--B--B--D--E--F--G
                  |
                test

或像这样(选项 B):

          master
            |
A--B--B--D--G
            |
          test

对不起,如果这已经被问过了,我找不到它。此外,ProGit 书中的示例只有一次提交(在我的示例中是 E),它不能解决这样的情况。

【问题讨论】:

  • 听起来您对提交的工作方式感到非常困惑。如果不实际更改 G(及其 SHA1),就不可能删除 E 和 F。
  • 并不是说它们被丢弃了,就像从未发生过的那样……而是从历史中“被遗忘”。当然,它们是 G 的基础。

标签: git merge commit preserve fast-forward


【解决方案1】:

会发生什么选项A:提交被保留。在快进合并的情况下,根本不会修改历史记录,只有 master 分支指向不同的提交。就是这样。

【讨论】:

  • 谢谢!这样说是有道理的,但我仍然想问......也许我只是太好奇了:-)
【解决方案2】:

你会得到一个快进合并(选项 A),开始的原因是因为在合并之前 master 和 test 之间只有一行提交。如果master和test之间有一个分支,就不会再是快进合并了。

我建议阅读this 以获得关于分支和合并如何在 git 中工作的一个很好的概述 - 你需要非常清楚这些东西在使用 git 时是如何工作的。

【讨论】:

  • ProGit 当然是主要文献。只有在本节中,master(C3)之前只有一个提交,并且在 ffwd 合并中不能忘记它。但是这一章没有涵盖在 master 之前多次提交的情况,这就是我问的原因。只想确认一下。谢谢!
  • @Martin 这样想——快进合并只不过是向前移动主分支指针,直到它与测试分支指针位于同一位置。如果可以,那么 git 会做到的 :)
  • 是的,明白了!只有措辞有点令人困惑——指针在时间方面向前发展,从早期的提交到最近的提交。但是如果你严格遵循提交指针,它们指向相反的方向——指向祖先,所以如果我们严格遵循指针——它实际上是一个 REWIND 合并。不是吗?
  • 没有。如您在其他问题中所述,最后添加了较新的提交。箭头指向你来自哪里,而不是你要去哪里。
【解决方案3】:

选项 A 会发生什么。有时人们想要保留分支点,并会强制 git 创建一个新的合并提交。

git merge --no-ff test

这取决于您要遵循的开发工作流程。

【讨论】:

    猜你喜欢
    • 2015-04-17
    • 1970-01-01
    • 2014-06-29
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    相关资源
    最近更新 更多