【问题标题】:Git creates a merge commit although it performs a fast-forward mergeGit 创建了一个合并提交,尽管它执行了一个快进合并
【发布时间】:2011-08-19 11:03:42
【问题描述】:

我正在将一个修补程序分支合并到 master 中。当我做一个简单的git merge hotfix-2.09 合并快进但我在日志中得到一个'merge branch "hotfix-2.09"' 提交。修补程序 01 - 08 没有这样做。我在合并时做错了什么,还是我的主人的状态发生了一些变化?

编辑 我想这不是真正的快进,而是像它一样。

[webapps@Staging www]$ git merge hotfix-2.09
Auto-merging includes/processOrderFunctions.php
Merge made by recursive.
 includes/processOrderFunctions.php |   38 +++++++++++++++++++++++++++++++----
 processorderPL.php                 |   29 ++++++++++++++++++---------
 2 files changed, 52 insertions(+), 15 deletions(-)

【问题讨论】:

  • 你指的是reflog吗?它实际上是说它快进吗? gitk 显示什么?
  • 我将不得不查找“reflog”,但我在 master 分支上查看 git log。当前的第一个提交是“Merge branch 'hotfix-2.09'”,第二个提交是我想要的 hotfix-2.09 合并中的提交。
  • gitk 显示合并提交中没有任何更改。
  • 我通过重置 master 来修复它,在修补程序上从 master 执行 rebase,然后再次合并修补程序。我不确定谁获得了下面的信誉,我会等待人们对答案进行投票。
  • "merge made by recursive" 清楚地表明它不是快进。为什么你认为它表现得像快进?

标签: git git-merge fast-forward


【解决方案1】:

你确定它是快进的吗?如果这样做,您将不会获得合并提交。

听上去,您正在将多个热修复合并到一个分支中。我假设这些修补程序分支是从同一时间点 (master) 创建的并且不是累积的? (即它们都从master 分支,而不是hotfix-2hotfix-1 等...)。

然后合并的第一个分支将快进,因为提交的 parent-ref 将匹配 master。当您合并第二个分支时,它的 parent-ref 将指向 master 的原始 HEAD 而不是新分支。这意味着它不能快进,因为它不是线性路径,这需要合并以“展平”树。

【讨论】:

    【解决方案2】:

    在进行合并之前,您有没有 rebasehotfix-2.09 掌握?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2021-08-15
      • 2015-01-05
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      相关资源
      最近更新 更多