【问题标题】:How to merge/cherry-pick a single commit如何合并/挑选单个提交
【发布时间】:2022-06-30 23:11:42
【问题描述】:

我有一个项目(基于 GitHub),其分支结构像这样

master:   A - B - C - D
            \
release:      W - X - M
                    /
bugfix:       Y - Z

因此,一旦 bugfix 被合并,release 将拥有 A - W - X - Y - Z - M,其中 M 是合并提交,YZ 是来自 bugfix 分支的原始提交。到目前为止一切都很正常。

现在,我想做的是将M 以及YZ 放入master。但这里有一点需要注意 - 我想要 WX 在 master 中。为什么? WX 是类似“Bump to our hotfix release version”的提交,在 master 中没有位置。所以最后,我希望master 成为A - B - C - D - Y - Z - M

如果我在Mgit cherry-pick,我只会得到M,我会丢失YZ 的历史记录。这就是我正在做的事情,但后来我在git blame 中失去了功能,并且作者最终被隐藏了(因为 GitHub 提交了由合并它的人创作的合并,而不是原始提交者)。

如果我在Mgit merge,我会得到我不想要的整个分支,包括WX

如何做到这一点?

【问题讨论】:

  • 你想要的并没有什么意义,因为M 是一个合并。如果您不想要WX,请不要选择M。而是将bugfix 合并到master
  • 合并 bugfix 到 master。
  • 我想要的,换一种方式问,是这样的:在 GitHub 上,合并请求针对的是发布分支。我现在想将该合并请求复制到 master
  • 不,我确实想要M,因为这告诉我`Person Alice 将来自作者 Bob 的 Pull Request #1234 合并到 Release 中",我想在我们的 master 中保留该历史记录。
  • 然后在合并到master之前将cherry-pick M放入bugfix(不携带代码有效负载但您会收到提交评论)。

标签: git merge cherry-pick


【解决方案1】:

您的图表缺少 之前 AY 的历史记录(即提交),但通常要做的是将错误修复直接合并到所有受影响的分支中。所以在这里你会git switch master 然后git merge bugfix

(我还建议将分支名称作为带有箭头的实体放入当前分支上的 last 提交,因为这就是名称在 Git 中的实际工作方式。通过以下方式更新分支添加更多提交只是将箭头移动到新的最后一次提交。如果您“重置提交”,则将箭头向后移动 - 在 Git 中,提交到提交箭头的方式 - 到较旧的提交,删除分支末尾的较新提交。)

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 2016-04-16
    • 2010-12-12
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2011-05-26
    相关资源
    最近更新 更多