【问题标题】:How to fix a pull request branch that suffered a bad merge?如何修复合并错误的拉取请求分支?
【发布时间】:2016-01-13 13:03:35
【问题描述】:

我有一个 pull request 分支,其中仅包含 15 个提交,并且在错误的合并(或错误的 rebase)之后,已经合并到 master 的提交在 GitHub 上显示为新的提交。

这些提交很可能是在第三方分支合并到拉取请求分支之前创建的,然后第三方分支合并到主分支。

不管我需要清理这个拉取请求分支,以便让 GitHub 只在提交和文件中显示拉取请求分支本身特定的 15 个提交。

您有任何提示和技巧来实现这一目标吗?在过去,我只是简单地将我知道的提交请求分支到新分支中。然后我删除了原来的 pull request 分支,将新的分支重命名为与原来的 pull request 分支相同的名称,并强制将该分支推送到 GitHub,从而产生一个干净的 diff。

但是,这种技术在具有许多协作者的长期运行的分支上并不理想,因为由于在原始拉取请求分支的生命周期内进行合并,因此很难确定哪些提交是该分支独有的。

【问题讨论】:

  • 你能用git log --oneline --graph --decorate 显示回购的当前状态吗?

标签: git github git-merge pull-request


【解决方案1】:

Rebase 删除合并提交作为流程的一部分。

这可能是你清理它的最佳选择 - 将拉取请求分支重新定位到 master。

我建议创建一个一次性分支来测试变基。

  • git checkout pull-request-branch
  • git checkout -b rebase-test
  • git rebase master rebase-test

这将使您可以选择将生成的 rebase-test 分支与 master 和 pull-request-branch 进行比较,以确保您获得所需的结果。

【讨论】:

    【解决方案2】:

    当我需要删除一个分支上的多个提交时,我使用交互式 rebase

    rebase -i <SHA of the last commit onto you rebase>
    

    然后您可以只评论您不想重播的提交(或删除行)。

    如果您需要查找两个分支共有的提交,您可以使用git show-branch

    除此之外,当您需要将一个分支拆分为多个具有独占提交子集的分支时,交互式 rebase 对 git reset 非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2022-07-05
      • 2016-07-04
      • 2016-06-20
      • 1970-01-01
      相关资源
      最近更新 更多