将上游Git更改与待处理的拉取请求合并

20

我在GitHub的常规工作流中经常遇到git的问题。

  1. 我fork一个仓库
  2. 我提交一些更改
  3. 我向上游仓库发起pull request
  4. 当上游开发者不处理我的pull request时,我就会无所事事。
  5. 上游开发者对其仓库进行更改
  6. 他们查看您的pull request,但由于他们树中的更改,它将不再适用,因此他们要求您更新您的pull request。
  7. 我从上游获取和合并更改到我的仓库,解决冲突,提交更改
  8. 我rebase我的pull request的commits,以使其整洁明了。

这就是问题所在:我的pull request现在包含了步骤2到7之间发生的所有更改,包括上游开发者自己的更改。在最近的一个例子中,这使一个10行的pull request扩展到了超过12,000行。

我应该如何将原始提交重新应用于后续版本的上游仓库,而不让它们的更改进入我的pull request?

2个回答

18

更改此内容

7)我从上游获取并合并更改到我的仓库,解决冲突,提交更改。

8)我将拉取请求中的提交进行变基,使其整洁有序。

为:

我将我的仓库变基到上游,使其整洁有序。

我们假设您从upstream / master分支派生了feature分支,并且为了安全起见,我们将使用一个临时分支。 如果出现问题,请删除feature-rebase分支并重新开始。

git checkout feature
git checkout -b feature-rebase
git rebase -i upstream/master

这将在upstream/master的顶部重新播放您提交的内容,就好像您现在刚刚分叉一样。一切看起来都很好后,用重排版本替换旧的feature分支。

git branch -m feature feature-old
git branch -m feature-rebase feature
git branch -d feature-old
git checkout feature
git push -f origin feature

3
这显然是正确的做法,但我相当确定过去曾出现过严重错误。话虽如此,还有一个后续步骤可能会出现问题——当我将这个变基推送到自己的代码库时,“push origin master”时非常重要,你必须指定“--force”,否则你可能会再次陷入混乱。 - Synchro

2
我无法从你的问题中确定你是否已经这样做了,但是当你为一个 pull request 做提交时,最简单的方法就是为它创建一个单独的分支。这样,你有一个简单的方式定义哪些提交应该包含在 pull request 中,并且稍后也可以更新 pull request 以包括新更改。
如果您想合并上游的新更改,可以获取这些更改,并将您的主题分支变基。当在 Github 上发起 pull request 时,您可以选择此分支,以确保正确的提交被拉入。
每次您推送到此分支时(即使使用 push -f),都会自动更新 pull request。

不幸的是,这并没有帮助 - 它只是将问题转移,因为同样的问题可能会在分支中发生。这里有一种在自己的更改中撤回自己更改的成分。我正在寻找的是一种从不同点重新应用我的更改的方法,但是在这里,我从上游拉取的更改看起来像是将我的旧分支应用到我的自己的更改,因此它们包含了太多的内容。 - Synchro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接