如何更新派生仓库中的拉取请求?


592

因此,我首先分叉了一个存储库,然后提交了该分叉的存储库。然后,我打开了请求请求。拉取请求列出了我想要的所有更改。

审核我的请求请求后,回购所有者希望我在接受之前进行许多更改。我已经在fork中进行了这些更改,现在如何使用这些更改来更新pull请求(或者这不是我应该如何处理)?



7
@PaulDraper我不同意,用户已经知道并提出了各种更新请求请求的方法,并询问哪种方法最好。另一方面,我不知道任何方法,正在询问它们的存在。正如这个问题的受欢迎程度所示,许多其他用户就是这种情况。
stevebot 2014年

6
我认为受欢迎是由于以下事实:(1)这是一个非常好的常见问题,(2)一些用户在这里而不是那里。如果最初将其标识为重复项,则他们会发现另一个问题相同,然后回答他们的问题。
Paul Draper 2014年

Answers:


583

您已正确完成。拉取请求将自动更新。该过程是:

  1. 打开请求请求
  2. 根据您本地仓库中的反馈提交更改
  3. 推到叉子的相关分支

拉取请求将自动在拉取请求讨论的底部添加新提交(即,它已经存在,向下滚动!


73
真好!除了实际的拉取请求,我到处都在检查。它的魔法,黑魔法,我不会质疑。
stevebot 2012年

57
这是在分支机构工作的好理由。例如,如果您始终压入母带,则可能无意中将其添加到先前的拉取请求中。
Brian Pan

3
即使过去,情况似乎不再如此。这里有一个拉请求我做(的例子github.com/toopay/bootstrap-markdown/pull/167相比分支本身()github.com/mhuggins/bootstrap-markdown/commits/...)。由于流程似乎已更改,因此如何继续执行此操作感到好奇。
马特·哈金斯

1
GitHub实际上告诉您:“通过推送到ChangeTheWorldProject上的SolveWorldHunger分支来添加更多提交。”
flow2k

1
此处相同-我看不到主存储库中的分叉仓库的更改。看起来像一个GitHub错误
andrfas

77

在GitHub中更新拉取请求就像将所需的更改提交到现有分支(与拉取请求一起使用)一样容易,但是通常也希望将更改压入单个提交中:

git checkout yourbranch
git rebase -i origin/master

# Edit command names accordingly
  pick   1fc6c95 My pull request
  squash 6b2481b Hack hack - will be discarded
  squash dd1475d Also discarded

git push -f origin yourbranch

...现在,拉取请求仅包含一次提交。


有关变基的相关链接:


2
支持提及重新定级。它有助于消除修订历史记录中的噪音。
stevebot 2014年

。+11(是的,我打算重点rrrrepeating使用Git重订/挑选/壁球是伟大的工作。
javadba

11
这种方法的缺点是您要删除先前的提交。这意味着,如果在拉取请求中做出注释,则它们将丢失,并与原始提交一起消失。
blowekamp 2015年

在Bitbucket中,您可以在拉取请求中看到有关文件“先前版本”的注释。尽管很高兴在Gerrit中看到类似的内容,您可以在其中修补提交并可以查看带有注释的整个历史记录。当您可以回头查看有关任何提交的完整讨论时,它将提供一个整洁的git历史记录和可追溯性。

35

只需推送到拉取请求引用的分支即可。只要pull请求仍处于打开状态,它就会自动使用任何添加的提交进行更新。


14

我使用以下步骤做到了:

  1. git reset --hard <commit key of the pull request>
  2. 我想做的代码更改了吗
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>

1
很好,我更喜欢这种方式!GitHub甚至隐藏(但保留了)过时的代码段和相关注释。最好记住,如果拉取请求包含多个提交,而需要修复的提交不在分支的顶端,那么“ git reset --hard”将丢弃在指定ID之后提交的所有更改。我有一个手动应用的备份。如果有多个提交,则不是很方便...
Nagev

3

如果在Windows上使用GitHub

  1. 在本地进行更改。
  2. 打开GitHub,切换到本地存储库,双击存储库。
  3. 将分支(靠近窗口顶部)切换到创建拉取请求的分支(即,比较的分支侧的分支)
  4. 应该看到在右侧输入提交注释并将更改提交到本地仓库的选项。
  5. 单击顶部的同步,这尤其将您的提交从本地推送到GitHub上的远程fork。
  6. 拉取请求将使用其他提交自动更新。这是因为提取的请求表示与fork分支的差异。如果您转到拉取请求页面(您和其他人可以在其中对您的拉取请求进行评论的页面),则“提交”选项卡应包含您的其他提交。

这就是为什么在开始进行自己的更改之前,应该为计划放入请求中的每组更改创建一个分支。这样,一旦发出拉取请求,就可以创建另一个分支并继续处理其他任务/功能/错误修复,而不会影响先前的拉取请求。

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.