首页 > 解决方案 > 合并分支后如何干净地执行 git pull-with-rebase

问题描述

替代标题:如何压缩合并提交?

我的本地存储库中有以下状态:

      C     (origin/feature)
     /
A - B - m   (feature)
       /
  Y - Z     (master)

我刚刚合并了从一个分支到另一个分支的更改(例如,从主分支到我们的特性分支,反之亦然)。当我这样做时,提交 B 和 Z 是各自分支中最新的提交。

然而!Dastardly Dan 只是将他的更改推送到我正在合并到 (C) 的分支。当我现在尝试推动时,我做不到。我首先必须获取更改并以某种方式合并它们。问题是:如何?

如果我使用 rebase 进行拉动,我最终必须解决 B 和 Z 之间合并中的所有冲突。如果我尝试合并,我最终会得到两个合并提交,这不是那么干净,也不应该没那么必要。

      C --
     /     \
A - B - m - m2
       /
  Y - Z

有什么方法可以压缩 m 和 m2 使其看起来像:

      C --
     /     \
A - B    -- m3
       /
  Y - Z

交互式 rebase 显然不会显示合并提交,并且樱桃选择要求我再次解决所有合并冲突(在 B 和 Z 之间,根本不受 C 影响)。

标签: gitmergesquash

解决方案


为了从:

      C --
     /     \
A - B - m - m2
       /
  Y - Z

至:

      C --
     /     \
A - B    -- m3
       /
  Y - Z

您可以按照此答案git commit-tree中的建议使用:

git commit-tree -p C -p Z m2^{tree}

推荐阅读