github:向现有pull请求添加提交

ax6ht2ek  于 2023-04-19  发布在  Git
关注(0)|答案(6)|浏览(171)

我在github上通过Fork & Edit this filefile按钮打开了一个pull request到rails repo。
现在,在我的公关得到反馈后,我想添加更多的提交。所以这里是我做的结束

$ git clone git@github.com:gaurish/rails.git #my forked repo
$ git rebase -i 785a2e5 #commit hash of my commit using which PR was opened
$ git checkout patch-3 #branch name I had to send my commits under to be shown in that PR
$ git commit -am "Changes done as per feedback"
$ git push origin patch-3

这工作得很好,但似乎是一个相当复杂的工作流程。也许我错了,这里出了什么问题?
我的问题是:我这样做是正确的吗?如果不是,那么正确的方法是什么?

to94eoyn

to94eoyn1#

由于您使用的是GitHub的工具,并且只更改了一个文件,因此您也可以在GitHub上使用browse to the file,从左上角的“tree:”下拉列表中选择适当的分支(在您的情况下为patch-3),然后选择“Edit this file”。现在,您的更改将提交到此分支,并将显示在您的pull request中

uxhixvfz

uxhixvfz2#

是的-你做的工作比你需要做的要多得多。只要做一个额外的提交,然后强制推送它。当你在浏览器中刷新github时,你会看到原始提交和新推送的提交。

$ git commit -m "These changes are in response to PR comments"
$ git push -f origin HEAD
evrscar2

evrscar23#

我最近刚刚blogged关于这个主题:
我们如何保持这个特性分支是最新的呢?合并最新的上游提交很容易,但是你要避免创建一个合并提交,因为当它被推送到上游时,你将不被欣赏:然后,你有效地重新提交上游更改,并且这些上游提交将获得新的哈希值(因为它们获得了新的父项)。这一点尤其重要,因为当你将这些更新推送到你的个人GitHub功能分支时,这些合并的提交将反映在你的GitHub pull请求中(即使你在发出pull请求之后这样做)。
这就是为什么我们需要变基而不是合并:

git co devel #devel is ansible's HEAD aka "master" branch
git pull --rebase upstream devel
git co user-non-unique
git rebase devel

git的rebase选项和rebase命令都可以保持树的整洁,避免合并提交。但请记住,这些是你的第一次提交(你发出的第一个pull请求),它们正在被rebase,并且现在有一个新的提交哈希,这与仍然在你的远程github repo分支中的原始哈希不同。
现在,将这些更新推送到您的个人GitHub功能分支将在这里失败,因为两个分支不同:本地分支树和远程分支树是“不同步”的,因为提交哈希不同。Git会告诉你先git pull --rebase,然后再推,但这不是简单的快进推,因为你的历史被重写了。不要这样做!
这里的问题是,你将再次获取你的第一个修改提交,因为它们是最初的,这些将被合并到你的本地分支之上。由于不同步状态,这个pull不会干净地应用。你会得到一个破碎的历史记录,你的提交会出现两次。当你把所有这些都推送到你的GitHub功能分支时,这些修改将被反映在原始的pull请求上,这会变得非常非常难看
AFAIK,实际上没有完全干净的解决方案。我发现的最好的解决方案是强制将本地分支推送到GitHub分支(实际上强制非快进更新):
根据git-push(1):

Update the origin repository’s remote branch with local branch, allowing non-fast-forward updates. This can leave unreferenced commits dangling in the origin repository.

所以不要拉,就像这样用力推:

git push svg +user-non-unique

或:

git push svg user-non-unique --force

这实际上会用本地分支的所有内容覆盖你的远程分支。远程流中的提交(导致失败的)会保留在那里,但会是悬空提交,最终会被git-gc(1)删除。没什么大不了的。
就像我说的,这是AFAICS最干净的解决方案。这样做的缺点是,您的PR将使用这些最新的提交进行更新,这些提交将获得较晚的日期,并且可能会在PR的评论历史记录中出现不同步。没有大问题,但它可能会令人困惑。

zhte4eai

zhte4eai4#

您还可以创建一个新的pull请求,将其绑定到master,而不是特定的abc1234修订版。
这样,任何新的提交/推送到您的仓库将被添加到拉取请求。

kg7wmglp

kg7wmglp5#

我能够通过以下步骤向现有的pull请求添加更多提交:
1.将最新的提交推送到特性分支
1.在GitHub中,转到功能分支并单击“New Pull Request”
1.您应该能够在下面的屏幕中看到之前打开的拉取请求。现在点击“查看拉取请求”:

1.你最新的提交应该被添加到你现有的pull request中。如果需要的话请留下评论

ctrmrzij

ctrmrzij6#

如果你已经有了这个分支的pull request,那么你的新提交应该是这个分支的pull request的一部分。
您可以在您的PR中检查更改的文件,并进行验证。

相关问题