为github上的项目做贡献,如何“将我的请求保存在master之上”


98

好的,我为github上的一个项目做贡献。github上的项目是upstream,我在github上的分支存储库是originlocal我的计算机上的存储库。

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怎么办?

谁能告诉我在这种情况下应采取的正确程序吗?

Answers:


109

您仅在上游存储库上显示访存。这实际上并不会更新您的任何本地分支机构。它只会更新您的知识upstream。您需要确保upstream/mastermastergit pull之前完全整合到您的文档中,例如使用a 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分支将与新的(重新设置基准)分支合并。您想用新分支的状态覆盖 ,转储旧分支的任何记录。这意味着您可以使用强制执行推送,即使它不是快速前进的方式也是如此。注意:origin/featurefeaturegit push -f origin feature危险,您可能因此失去承诺。仅当您完全确定自己知道自己在做什么时才使用它,就像在这里,您有意要在re-base feature分支中删除旧的,无用的提交。


1
好的,我知道了,谢谢您的澄清。我看到我应该拉扯而不是拿来。现在,git push origin feature我遇到另一个问题,当我遇到非快速转发错误,无法推送等时。git pull --rebase是否可以解决此错误并推送到我的功能分支,否则会给维护人员和其他人员造成问题吗?
fontno

1
更新了我的答案以涵盖推送内容。
瑞安·斯图尔特

就我而言,我将上游存储库添加为远程存储库,但是却忘记了从中获取。git fetch upstream下载了最新的更改,然后最终成功了git rebase upstream/develop
阿尔贝托·基乌索

9

现在,上游维护者要求我“在主服务器上重新设置我的拉取请求”

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

请参阅“重新整理并合并拉取请求

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.