17

我在 GitHub 上的一个常见工作流程中不断遇到 git 问题。

  1. 我分叉一个回购
  2. 我提交了一些更改
  3. 我向上游仓库发出拉取请求
  4. 当上游开发人员坐在我的拉取请求上时,旋转拇指。
  5. 上游开发人员对他们的 repo 进行了更改
  6. 他们查看您的拉取请求,但由于他们的树中的更改将不再干净地应用,所以他们要求您更新您的拉取请求。
  7. 我从上游获取更改并将更改合并到我的存储库中,解决冲突,提交更改
  8. 我在我的拉取请求中重新提交提交以使其整洁。

这就是问题所在:我的拉取请求现在包含步骤 2 和 7 之间发生的所有更改,包括上游开发人员自己的更改。在最近的一个示例中,这将一个 10 行的拉取请求扩展到超过 12,000 行。

我应该如何将我的原始提交重新应用到上游 repo 的更高版本,而他们的更改不会进入我的拉取请求?

4

2 回答 2

16

改变这个

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

8)我在我的拉取请求中重新提交提交以使其整洁。

我将我的 repo 重新定位到上游,使其整洁。

我们假设您feature从 分叉了分支upstream/master,并且为了安全起见,我们将使用临时分支。如果出现问题,只需删除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
于 2013-01-08T21:11:05.103 回答
2

如果您已经在这样做,我无法弥补您的问题,但是当您提交拉取请求时,最简单的方法是为其创建一个单独的分支。

这样,您就可以轻松定义拉取请求中应包含哪些提交,并且以后还可以更新拉取请求以包含新更改。

如果您想要合并来自上游的新更改,您可以获取这些更改,并在其上重新设置您的主题分支。

在 github 中发出拉取请求时,您可以选择此分支,以确保拉入正确的提交。

每次你推送到这个分支(甚至 push -f)都会自动更新拉取请求。

于 2012-11-26T08:26:40.017 回答