首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >github:向现有的拉请求添加提交

github:向现有的拉请求添加提交
EN

Stack Overflow用户
提问于 2012-04-13 19:53:08
回答 5查看 97.7K关注 0票数 114

我使用钢轨 Fork&编辑这个文件文件按钮,在github上打开了一个对回购的拉请求。

现在,在收到关于我的公关的反馈后,我想添加更多的提交。这就是我最后所做的

代码语言:javascript
复制
$ 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

这很好,但似乎是一个相当复杂的工作流程。也许我错了这里有什么不对劲吗?

我的问题是:我这样做是正确的吗?如果没有,那么做这件事的正确方法是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-13 20:20:42

由于您正在使用GitHub的工具,只需更改一个文件,您还可以在浏览到文件 on GitHub中,从"tree:“下拉(在您的示例中是patch-3)下的左上角选择适当的分支,然后选择”编辑此文件“。现在,您的更改将提交到此分支,并将显示在您的拉请求中。

票数 78
EN

Stack Overflow用户

发布于 2020-05-21 15:31:19

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

代码语言:javascript
复制
$ git commit -m "These changes are in response to PR comments"
$ git push -f origin HEAD
票数 45
EN

Stack Overflow用户

发布于 2013-04-13 18:41:42

我最近刚刚就这个话题做了博客

如何保持此功能分支的最新更新?合并最新的上游提交很容易,但是您希望避免创建合并提交,因为这在被推到上游时不会被理解:然后,您将有效地重新提交上游更改,而那些上游提交将得到一个新的散列(当他们得到一个新的父程序)。这一点特别重要,因为当您将这些更新推送到您的个人GitHub特性分支时,这些合并提交将反映在您的GitHub拉请求中(即使您在发出拉请求之后也会这样做)。

这就是为什么我们需要重新建立基础而不是合并:

代码语言:javascript
复制
git co devel #devel is ansible's HEAD aka "master" branch
git pull --rebase upstream devel
git co user-non-unique
git rebase devel

rebase选项和git的rebase命令都将保持树的整洁,并避免合并提交。但是请记住,这些是正在重基的第一个提交(发出第一个拉请求),它现在有一个新的提交哈希,这与仍然在您的远程github回购分支中的原始散列不同。

现在,将这些更新推送到您的个人GitHub特性分支将在这里失败,因为两个分支都不同:本地分支树和远程分支树“不同步”,因为这些不同的提交散列。Git将告诉您第一个git pull --rebase,然后再推,但这将不是一个简单的快速推进,因为你的历史被改写。别干那事!

这里的问题是,您将再次获取最初更改的提交,这些提交将合并到本地分支之上。由于不同步状态,此拉不适用干净.当提交出现两次时,您将得到一个破碎的历史记录。当您将所有这些都推到您的GitHub特性分支时,这些更改将反映在原始的拉请求中,这将变得非常非常丑陋。

AFAIK,实际上没有完全清洁的解决方案。我发现的最佳解决方案是强制将本地分支推到GitHub分支(实际上强制进行非快速转发更新):

根据git-推送(1):

代码语言:javascript
复制
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.

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

代码语言:javascript
复制
git push svg +user-non-unique

或者:

代码语言:javascript
复制
git push svg user-non-unique --force

这实际上将很明显地覆盖您的远程分支,并包含本地分支中的所有内容。远程流中的提交(并导致失败)将保持在那里,但将处于悬空状态,最终将被git-gc(1)删除。别小题大作。

正如我所说,这是AFAICS最干净的解决方案。缺点是,您的PR将更新与那些最新的提交,这将得到一个较晚的日期,并可能出现在公共关系的评论历史不同步。没什么大问题,但可能会让人困惑。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10147445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档