git - merge 一个提交落后的 pull 请求

标签 git github pull-request git-fork

我 fork 了一个 Github 存储库并做了几天的一些更改,从未从原始存储库(我创建了一个 fork 的存储库)中 pull 。

现在我向原始仓库发出了 pull 请求。我发现 repo 在我 fork 后得到了另一个提交。

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

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

最佳答案

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

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

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

或者,repo 维护者可以rebase你的分支然后 merge 它:

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

当一切顺利时,M 的状态将与进行常规 merge 时的状态完全相同。然而,XYZ 将分别看起来像是源自 C(它们的 SHA1 值将也改变)。

这两种方法同样有效,如果您遗漏了相当多的提交(即在开发几周后),建议使用 rebase

请注意:如果您的分支没有完全 merge 并且冲突不容易修复,则 repo 维护者可能会要求进行 merge 或 rebase 。提供可 merge 分支是您的工作。

在这种情况下,只需获取您正在请求 pull 的分支的最新版本,然后自己尝试 merge :

git checkout your-branch
git pull upstream master

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

之后,该分支将干净利落地 merge 到上游。只需为您新 merge 的分支发布一个新的 pull 请求。

关于git - merge 一个提交落后的 pull 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19976844/

相关文章:

Git 推送不工作错误 "You must use a personal access token or SSH key"

git - 如何配置 Magit 以使用我的 Github 用户名?

git - 在 Bitbucket : error "Unrelated branches" 中创建 pull 请求

Git 克隆错误 : RPC failed - curl 28 Operation too slow

Git rebase/master 从分支更改为 master

git - 如何为 pull 请求设置默认 fork ?

git - 有没有办法制作 PR 但在我的 github 帐户中将 repo 设为私有(private)?

Github pull 请求模板未显示

git - 为什么 vsdiffmerge 总是打开一个新的 VisualStudio 而不显示差异

git - 我们应该共享公钥以检查 git 存储库中的签名吗?