【问题标题】:Merge a Pull request which is one commit behind合并一个拉取请求,该请求是一个提交
【发布时间】:2013-11-27 09:58:32
【问题描述】:

我创建了一个 Github 存储库并在几天内进行了一些更改,但从未从原始存储库(我创建了一个 fork 的存储库)中拉取数据。

现在我向原始存储库发出了拉取请求。我发现在我 fork 之后,repo 得到了另一个提交。

所以我的问题是,如果 repo 的所有者接受了 pull request,他之后所做的提交会保留还是他的 repo 会成为我 fork 的相同副本?

如果是后者,那你能告诉我如何删除他所做的提交吗?

【问题讨论】:

  • 你能不能不拉他的改动,合并到你的分支,再发送一个拉取请求?
  • 那么,你是说他的 repo(在接受 pull request 之后)将成为我 repo 的相同副本?

标签: git github pull-request git-fork


【解决方案1】:

两个分支的所有更改都将出现在历史记录中:

A-B------C----M--...
   \-X-Y---Z-/

其中XYZ 是您的提交,C 是您缺少的提交。提交M 是一个合并提交,它将包含您的所有更改(并可能修复与C 的任何合并冲突)。您的提交将保持不变,之后M 将包含来自CXYZ 的所有更改。

或者,repo 维护者可以rebase您的分支并在之后合并它:

A-B-C---------M--...
     \-X-Y-Z-/

当一切顺利时,M 的状态将与进行常规合并时完全相同。但是,XYZ 将分别被设置为它们源自 C(它们的 SHA1 值也会发生变化)。

这两种方法同样有效,如果您缺少大量提交(即开发几周后),建议使用 rebase

注意:如果您的分支没有干净地合并并且冲突不容易解决,repo 维护者可能会要求进行合并或变基。提供可合并的分支是你的工作。

在这种情况下,只需获取您要拉取请求的分支的最新版本并自己尝试合并:

git checkout your-branch
git pull upstream master

git checkout your-branch
git pull --rebase upstream master

之后,分支将干净地合并到上游。只需为新合并的分支发布新的拉取请求即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2012-03-01
    • 2020-02-12
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多