从 git --squash 合并 PR(未关闭)

问题描述 投票:0回答:3

当我在分支中开发并将其合并到 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

git github merge version-control
3个回答
6
投票

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

完整答案如下:

自动合并拉取请求的逻辑着眼于提交 SHA 在 Pull Request 中的表现。

如果所有提交 SHA 均已推送到基础分支 我们已经自动将其标记为已合并。

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

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

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

我无法保证我们是否或何时添加此内容,但我肯定会通过它 一起!

他们会考虑该请求。希望会在某个时候添加。


1
投票

这是由于

git merge
git merge --squash
之间的机制不同造成的。

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

…---A     master
     \
      B   alpha

情况1:如果您使用

git merge --no-ff alpha
,提交历史记录将是:

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

将更改推送到 github 后,PR 知道提交

C
是合并的提交(因为 commit
C
有两个父级,分别位于
master
分支和
alpha
分支
),因此 PR 将被关闭。

情况2:如果您使用

git merge --squash alpha
,提交历史记录将是:

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

将更改推送到 github 后,PR 很难判断 commit

C'
master
分支的新更改还是来自
alpha
分支的压缩合并提交(commit
C'
只有一个父级)
)。

目前,github 仅处理关闭 PR 的情况1,因为

alpha
分支显然已合并到
master
分支。而对于情况2,由于提交
C'
只有一个父提交
A
,PR不会被关闭。


0
投票

您可以使用

gh
cli

gh pr merge <PR-number> -s
© www.soinside.com 2019 - 2024. All rights reserved.