如何在Git历史记录中合并拉取请求而不产生合并提交

30
每次在Github将拉取请求合并到我的基础分支时,我都会得到一个额外的合并提交记录:

合并拉取请求 #77 ...

我希望获取一个不包含这些合并提交记录的git历史记录,请问如何实现?

git merge --squash - ckruczek
这将把所有的提交合并成一个。 - Achraf JEDAY
作业正确后,它会将压缩提交作为单个提交应用于您的HEAD,而不会创建与“pull request”分支的父关系。请参见此处 - ckruczek
1
不要使用合并,而是使用变基,可选择性地压缩提交,但大多数情况下并不需要。这将重新定位并重新应用相同的提交到您当前分支的顶部,并避免合并提交。但是,您现在已经重写了历史记录,因此拥有拉取请求的存储库的所有者最好根据您的重写更新他的存储库,否则您将在以后收到具有相同提交的类似拉取请求。 - Lasse V. Karlsen
@LasseV.Karlsen 我通常在合并 PR 后不再使用 PR 分支,所以这对我来说不是问题。 - Achraf JEDAY
2个回答

24
为了获得没有拉取请求合并提交记录的Git历史记录,我可以使用合并按钮(拉取请求页面),然后执行变基和合并操作:

在此输入图片描述


7
问题是'Squash and merge'和'Rebase and merge'都会导致GPG签名丢失。 - X.Q. Kuang
5
如果源分支基于目标分支,有没有一种方法可以防止 GH 生成新的提交(具有新的哈希值)? - Froxx

11
以下是您的选项:
  • 挤压
  • 变基
  • 合并
挤压将导致单个新提交,代表主分支头部的所有更改。这是变基的特殊情况。
变基将导致一个或多个新提交(任何一个或全部都可能处于“损坏”/无法构建状态),在主分支头部。
合并创建一个合并提交,并保留历史记录。
以下是选项文档:https://github.com/blog/2243-rebase-and-merge-pull-requests

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接