我 fork 了一个 Github 存储库并做了几天的一些更改,从未从原始存储库(我创建了一个 fork 的存储库)中 pull 。
现在我向原始仓库发出了 pull 请求。我发现 repo 在我 fork 后得到了另一个提交。
所以我的问题是,如果 repo 的所有者接受 pull 请求,他之后所做的提交会保留还是他的 repo 会成为我的 fork 的相同副本?
如果是后者,那你能告诉我如何不删除他所做的提交吗?
最佳答案
两个分支的所有更改都将出现在历史记录中:
A-B------C----M--...
\-X-Y---Z-/
X
、Y
和 Z
是您的提交,C
是您缺少的提交。提交 M
是一个 merge 提交,它将包含您在其中的所有更改(并可能修复与 C
的任何 merge 冲突)。您的提交将保持不变,之后 M
将包含来自 C
、X
、Y
和 的所有更改Z
.
或者,repo 维护者可以rebase你的分支然后 merge 它:
A-B-C---------M--...
\-X-Y-Z-/
当一切顺利时,M 的状态将与进行常规 merge 时的状态完全相同。然而,X
、Y
和 Z
将分别看起来像是源自 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/