当我在分支中开发并将其合并到 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?
如果有人遇到同样的问题。 我通过电子邮件联系了 GitHub 团队,他们告诉我现在不可能,因为他们使用 SHA 的提交将合并提交与 PR 链接起来。
完整答案如下:
自动合并拉取请求的逻辑着眼于提交 SHA 在 Pull Request 中的表现。
如果所有提交 SHA 均已推送到基础分支 我们已经自动将其标记为已合并。
当您压缩提交并推送时,对原始内容的引用 提交丢失了。
这意味着目前无法将 PR 标记为合并,如果 提交已被压缩并从命令行推送。
我可以将您的请求传递给团队以供将来考虑 改进。
我无法保证我们是否或何时添加此内容,但我肯定会通过它 一起!
他们会考虑该请求。希望会在某个时候添加。
这是由于
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不会被关闭。
您可以使用
gh
cli
gh pr merge <PR-number> -s