在github上为项目做贡献,如何“在主人之上重新提出我的拉取请求”

时间:2013-06-19 03:55:49

标签: git github

好的,所以我在github上为一个项目做贡献。 github上的项目是upstream,我在github上的分叉回购是origin,我的local回购在我的计算机上。

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

然后我提交拉取请求

git push origin master

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

现在我被upstream维护者要求“在主人之上修改我的拉取请求”

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

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

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时,这怎么可能?

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

2 个答案:

答案 0 :(得分:101)

您只显示上游仓库的提取。这实际上并没有更新任何本地分支机构。它only updates your knowledge of upstream。在重新定位到upstream/master之前,您需要确保master完全合并到git pull中,与master完全合并,或者更简单地只需将upstream/master重新合并到git checkout master git pull upstream master git checkout feature git rebase master 上}}

即:

git checkout feature
git rebase upstream/master

feature

<强>更新

修复本地origin分支后,您需要将其推回feature以完成更新请求。既然你已经推了push一次,那么你不能再简单地feature因为一个rebase会改变历史记录,而且不会再是快进了。通常情况下,如果推动失败并且“非快进”,你可以通过拉动来解决它,但拉动只会结合两个不同的历史,这绝对不是你想要的。这意味着你的旧(pre rebase)origin/feature分支将与新的(post rebase)分支组合。您希望使用新feature分支的状态覆盖 git push -f origin feature,转储旧记录的任何记录。这意味着你将要使用feature强制推动发生,即使它不是快进。注意:强制推送危险,您可能会失去对它的提交。只有在你完全确定自己知道自己在做什么的时候才使用它,就像在这里一样,你故意想要在pre-rebase {{1}}分支中删除旧的,无用的提交。

答案 1 :(得分:7)

  

现在我被上游维护者要求“在主人之上重新提出拉取请求”

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

请参阅“Rebase and merge pull requests

  

当您选择新的“Rebase and merge”选项时,来自pull请求的分支的提交将重新定位到基本分支的顶端,然后基本分支本身将快速转发到此新重定位的头部。 Rebases会自动将rebased提交的提交者设置为当前用户,同时保持作者身份信息的完整性。此操作不会修改pull请求的分支。

     

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

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