同步分支与上游仓库

Syncing branch with upstream repo

我分叉了一个 repo 并在我的分叉中创建了一个名为 B 的新分支。工作了一段时间后,我想为 B 创建一个 pull request,但原来的 repo 已经提交了。目前该分支是“提前 3 次提交,落后原始 5 次提交”。

如何确保在创建 Pull Request 时没有冲突?

我知道这听起来像是一个重复的问题,但我无法find/couldn不理解网络上的任何解决方案。

首先,要考虑的一点是,如果您没有更改原始存储库中更改的任何相同代码行,那么可能不会有任何合并冲突。如果是这种情况,那么即使您的分支落后,维护者也应该能够使用 GitHub 的合并按钮。

如果不是这种情况,或者您仍想确保您的分支是最新的,请继续阅读。

您的存储库可能看起来像这样:

A--B--C--D--E--F [master]
 \
  G--H--I [branch B]

(执行 git log --all --oneline --decorate --graph 以查看您的存储库的类似输出。)

您有两个选择:合并或变基。检查 repo 中的 CONTRIBUTING 文件(如果有的话),因为项目通常会有关于您应该使用哪个选项的规则或指南。

合并

要一次解决所有冲突,您可以从原始仓库中的 master 合并到您的分支中。你会这样做:

git checkout B
git merge --no-ff master

如有必要,解决任何冲突并提交。

您的历史记录将如下所示:

A--B--C--D--E--F [master]
 \        \
  G--H--I--J [branch B]

变基

为了避免合并提交 J,您可以改为将您的分支变基到 master

git checkout B
git rebase master

您的历史记录将如下所示:

A--B--C--D--E--F [master]
                \
                 G'--H'--I' [branch B]

例如标签G' 表示提交具有与以前相同(或相似)的内容,但由于它们具有新的父提交,因此它们在技术上是新的提交(具有新的 SHA1 哈希)。


合并的好处是可以一次解决所有的冲突,但它会导致更混乱的历史。变基的好处是它可以导致更清晰的历史记录,但由于它涉及重写历史记录,如果您已经发布了分支,它可能会导致冲突。再次检查项目是否有任何使用规则/指南。