98

好的,所以我为 github 上的一个项目做出了贡献。github 上的项目是upstream,我在 github 上的分叉 repo 是originlocal我的计算机上的 repo 是 。

git checkout -b feature
# Working on feature
git commit -a -m 'only commit on feature'

然后我提交一个拉取请求

git push origin master

对拉取请求进行审查,并且需要进行不相关的更改。其他人提交并合并到upstream/master

现在,upstream维护人员要求我“将我的拉取请求重新设置在 master 之上”

这是我的故事(插入法律与秩序音效).....

我没有对拉取请求进行任何更改,它仍然是对分支功能的相同提交。

git checkout master
git fetch upstream
git checkout feature
git rebase master
=> "Current branch feature is up to date."
git push origin feature
=> "Everything up-to-date"

我不明白。当我知道upstream/master在我将拉取请求推送到之后有人提交并合并时,这怎么可能origin/feature

谁能告诉我在这种情况下正确的程序应该是什么?

4

2 回答 2

112

您仅在上游存储库中显示提取。这实际上并没有更新您的任何本地分支机构。它只会更新你的知识upstream。您需要确保upstream/master完全合并到您的master中,例如使用 a git pull,然后再重新定位到master,或者更简单地说只是重新定位到upstream/master.

IE:

git checkout master
git pull upstream master
git checkout feature
git rebase master

或者

git checkout feature
git rebase upstream/master

更新:

修复本地feature分支后,您需要将其推回origin以完成更新拉取请求。既然你已经推送feature过一次,你不能再简单地push因为 rebase 改变历史,它不再是一个快进。通常,如果“非快进”推动失败,您会通过拉动来解决它,但拉动只会结合两个不同的历史,这绝对不是您想要的。这意味着您的旧(rebase 前)feature分支将与新的(rebase 后)分支相结合。您想用新分支的状态覆盖 ,转储旧分支的任何记录。这意味着你会想要强制推动发生,即使它不是快进,使用. 笔记:origin/featurefeaturegit push -f origin feature危险的,你可能会失去它的提交。仅当您绝对确定自己知道自己在做什么时才使用它,例如在这里,您有意在 pre-rebasefeature分支中删除旧的、无用的提交。

于 2013-06-19T04:03:45.913 回答
12

现在上游维护人员要求我“将我的拉取请求重新设置在 master 之上”

请注意,自 2016 年 9 月起,维护者可以自己触发变基。

请参阅“变基和合并拉取请求

当您选择新的“Rebase and merge”选项时,来自拉取请求分支的提交将重新基于基础分支的尖端,然后基础分支本身将快速转发到这个新重新定位的头部。变基会自动将变基提交的提交者设置为当前用户,同时保持作者信息不变。此操作不会修改拉取请求的分支。

如果由于冲突而无法执行变基,我们会通知您,以便您可以根据需要手动解决它们。

https://cloud.githubusercontent.com/assets/2195/18671961/a03fa9b6-7f35-11e6-8fa0-e16b2fede8ca.gif

于 2016-09-26T16:04:10.783 回答