Dan*_*scu 4 git commit github pull-request
在回购的大部分时间里,我们看到PR,然后是PR的合并提交,它只是说"Merged pull request #XXX from ...".
但是最近,我看到了一个压缩版本,其中pull请求者和提交者的头像重叠,并且历史记录中只显示了一个干净的提交:

如何才能做到这一点?
我尝试过但不起作用:
UPDATE
当我的一个PR以这种方式合并时的样子:

结果是:

GitHub 在合并时引入了一个压缩提交的选项,因此您可以直接从其Web UI执行此操作:
刚刚从Meteor团队找到了这个工作流程(巧合的是,感谢@Emily):
当您在GitHub Web界面中查看pull请求时,会出现一个非常有吸引力的"合并"按钮.永远不要使用合并按钮.这是一个有吸引力的滋扰.它会导致git历史变得比必要的更复杂:如果PR是在一个月前提交的,那么提交的父级将是一个非常旧的修订版,导致在git历史的图形视图中有更多的行.另外,如果您使用合并按钮,这意味着您没有查看代码并自行尝试!以下是降落请求的更好方法.
首先,在您的存储库中,找到[remote "origin"]该.git/config文件的部分并添加以下行:
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
Run Code Online (Sandbox Code Playgroud)
确保在现有的提取行之前添加它.现在,每次你git fetch,你都会在repo中获得所有Pull Requests!这是一次性更改,可让您永久直接访问PR.
然后,您可以git checkout pr/XXX直接使用更改.一个git push origin后挑肥拣瘦将创建紧凑PR:
git checkout pr/32
# ... test changes ...
git checkout master
git cherry-pick pr/32
git push
Run Code Online (Sandbox Code Playgroud)

唯一的缺点是GitHub在关闭时不会自动删除PR分支,但只需点击一下即可获得更好的历史记录.
如果PR是多次提交,最好的做法是检查它,将其重新绑定到开发分支,进行所需的任何其他更改,并使用显式合并提交将其合并回开发分支.这类似于GitHub合并按钮所做的,除了合并按钮没有执行非常重要的rebase步骤,因此它在项目的git提交历史中留下了丑陋的意大利面.为此,请运行:
Run Code Online (Sandbox Code Playgroud)git checkout pr/32; git rebase devel; git checkout devel; git merge --ff-only pr/32然后测试并推动.
如果您想将一些提交组合到一个提交中,则可以通过运行
git rebase -i devel来使用交互式rebase .一些教程:http ://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html https://www.atlassian.com/git/tutorials/rewriting-history/git-reflog不幸的是,GitHub不够智能,无法检测到您手动合并PR,因此您需要手动注释并通过指向相关提交的链接关闭该问题.或者,确保合并提交的消息包含
Fixed #123.
更新: Kahmali Rose进行了进一步的更新,使GitHub能够检测PR被合并,就像点击了邪恶的Merge按钮一样:确保改变并合并而不是采摘樱桃.