首选Github工作stream程,用于在代码审查后更新拉取请求

我已经向Github上的开放源代码项目提交了一个更改,并收到了一位核心团队成员的代码审查意见。

我想在考虑到评论意见的情况下更新代码,并重新提交。 什么是最好的工作stream程呢? 从我有限的git / github的知识,我可以做任何以下几点:

  1. 将代码更新为新提交,并将初始提交和更新提交添加到我的请求中。

  2. 不知何故(??)从我的仓库回滚旧的提交,并创build一个包含一切的新的提交,然后提出一个拉请求?

  3. git commit有一个修改function,但是我听说你在本地仓库之外推送提交之后不应该使用它。 在这种情况下,我在本地PC上进行了更改,并将其推送到项目的github分支。 这可以用“修改”吗?

  4. 别的东西?

看起来好像选项2/3会很好,因为开源项目只会在其历史logging中提交一个实现所有内容的提交,但是我不确定如何执行此操作。

注:我不知道这是否会影响答案,但我没有在一个单独的分支进行更改,我只是做了一个提交在主

只需要向拉取请求中使用的分支添加一个新的提交,并将分支推送到GitHub。 拉请求将自动更新与额外的提交。

#2和#3是不必要的。 如果人们只想看到你的分支被合并到了哪里(而不是额外的提交),他们可以使用git log --first-parent来查看日志中的合并提交。

更新拉取请求

要更新一个拉取请求(点#1),您唯一需要做的就是检出拉取请求所来自的同一个分支并再次推送:

 cd /my/fork git checkout master ... git commit -va -m "Correcting for PR comments" git push 

可选 – 清洁提交历史logging

你可能会被要求压缩你的提交,这样资料库的历史就是干净的,或者你自己想删除中介提交,这会分散你的请求(“#2”)中的“消息”。 例如,如果您的提交历史logging如下所示:

 $ git remote add parent git@github.com:other-user/project.git $ git log --oneline parent/master..master e4e32b8 add test case as per PR comments eccaa56 code standard fixes as per PR comments fb30112 correct typos and fatal error 58ae094 fixing problem 

把东西压在一起是一个好主意,所以它们看起来像一个单一的提交:

 $ git rebase -i parent/master 

这将提示您select如何重写您的拉取请求的历史logging,以下将在您的编辑器中:

 pick 58ae094 fixing actual problem pick fb30112 correct typos pick eccaa56 code standard fixes pick e4e32b8 add test case as per PR comments 

对于任何你想成为前一次提交的提交 – 改变select压扁:

 pick 58ae094 fixing actual problem squash fb30112 correct typos squash eccaa56 code standard fixes squash e4e32b8 add test case as per PR comments 

closures你的编辑器。 然后,Git将重写历史logging,并提示您提供一个合并提交的提交消息。 相应的修改和您的提交历史现在将是简洁的:

 $ git log --oneline parent/master..master 9de3202 fixing actual problem 

把它推到你的叉子上:

 $ git push -f Counting objects: 19, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (11/11), 978 bytes, done. Total 11 (delta 9), reused 7 (delta 6) To git@github.com:me/my-fork.git f1238d0..9de3202 HEAD -> master 

你的pull请求将包含一个单独的提交,包含所有先前分割成几个提交的更改。

改变公共回购的历史是一件坏事

重写历史logging和在一个可能已经克隆了其他人的分支上使用git push -f是一件坏事 – 它会导致版本库的历史logging和检出的历史发生分歧。

然而,修改你的fork的历史logging来纠正你提出的被整合到一个版本库中的改变是件好事。 因此没有任何保留压制你的拉动要求“噪音”。

关于分支的说明

在上面的例子中,我将pull请求显示为来自fork的master分支,这并不是必须的,但是它确实会造成某些限制,比如,如果这是您的标准技术,那么只能有一个PR打开库。 为你想要build议的每个单独的变更创build一个分支是一个更好的主意:

 $ git branch feature/new-widgets $ git checkout feature/new-widgets ... Hack hack hack ... $ git push # Now create PR from feature/new-widgets 

我对最佳实践的看法:一旦你准备打包请求,它应该得到它自己独特的主题分支,特别是为了这个目的,一开始。 你开始把分支推到你的github仓库,例如

 git push origin name-of-pull-request-branch 

并根据该分支拉取请求。 完成之后,您推送到该分支的任何提交将自动附加到该请求。 你别用那个分支。

有些人更喜欢用你的github用户名命名空间。 这样,他们可以自由地在本地检查出来,试试看,好处一样

  • 减less分支名称碰撞的恐惧
  • 更容易记住它是什么

我通常把我的pull请求分支命名为

 claybridges-do-the-things