从git --squash合并PR(不接近)

时间:2017-11-23 09:40:52

标签: git github merge version-control

当我在分支中开发并将其合并到master中时:

git merge --no-ff $BRANCH
git push origin HEAD

它合并了Github中的PR(紫色徽章)。

但如果我想将它合并而压扁:

git merge --squash $BRANCH
git add . && git commit -m "Merge branch '$BRANCH'"
git push origin HEAD

它保持打开直到我删除分支:

git branch -D $BRANCH 
git push origin :$BRANCH

如何在Github中合并一个压扁的分支和合并(不关闭) PR?

以下是一个示例回购:https://github.com/sospedra/better-pr-close

2 个答案:

答案 0 :(得分:3)

如果有人遇到同样的问题。 我通过电子邮件联系了GitHub团队,他们告诉我现在不可能,因为他们使用SHA的提交将合并提交链接到PR。

以下是完整的答案:

  

自动合并Pull Request的逻辑查看提交   SHA在Pull请求中出现。

     

如果所有提交SHA都已被推送到基本分支   已经,我们会自动将其标记为已合并。

     

当您压缩提交并推送时,对原始的引用   提交丢失了。

     

这意味着目前无法将PR标记为已合并if   提交已被压缩并从命令行推送。

     

我可以将您的请求传递给团队,以便考虑将来   改进。

     

我无法承诺,无论我们是否添加此内容,但我确实无法通过   沿着!

他们会考虑这个要求。希望在某些时候添加。

答案 1 :(得分:1)

这是由git mergegit merge --squash之间的不同机制引起的。

假设在合并两个分支之前,提交历史记录如下:

…---A     master
     \
      B   alpha

情况1:如果您使用git merge --no-ff alpha,则提交历史记录将为:

…---A---C  master
     \ /
      B    alpha

将更改推送到github后,PR知道提交C是合并提交(因为提交Cmaster分支和alpha上都有两个父项分支),因此PR将被关闭。

情况2:如果您使用git merge --squash alpha,则提交历史记录将为:

…---A---C'   master
     \
      B      alpha

将更改推送到github后,PR很难判断commit C'master分支的新变化,还是来自alpha分支的压缩合并提交(< strong>提交C'只有一个父)。

目前,github仅将情境1视为关闭PR,因为alpha分支显然已合并到master分支。对于situation2,由于提交C'只有一个父提交A,因此PR不会被关闭。