【问题标题】:Merge a PR (not close) from git --squash从 git --squash 合并 PR(不关闭)
【发布时间】:2017-11-23 09:40:52
【问题描述】:

当我在一个分支中开发并将其合并到 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 merge --squash之后,你需要运行git commit来完成合并。
  • 是的,我愿意。我会更新 oc 以避免混淆
  • 在某些情况下这是可行的:一旦你完成了 squash 提交,你可以先强制推送到 PR 分支,等待 GitHub 用新的提交更新 PR,然后推送到集成分支(例如 master)。这仅适用于您拥有发出拉取请求的分叉,或者发出拉取请求的人在发出拉取请求时没有取消选中“允许维护者进行编辑”。

标签: git github merge version-control


【解决方案1】:

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

这是完整的答案:

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

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

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

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

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

我不能保证我们是否或何时添加它,但我肯定会通过它 一起来!

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

【讨论】:

    【解决方案2】:

    这是由git merge 和git merge --squash 之间的不同机制造成的。

    假设在合并两个分支之前,提交历史是这样的:

    …---A     master
         \
          B   alpha
    

    情况1:如果你使用git merge --no-ff alpha,提交历史将是:

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

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

    情况2:如果你使用git merge --squash alpha,提交历史将是:

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

    将改动推送到github后,PR很难判断commit C'是master分支的新改动还是alpha分支的squash合并提交(commit C'只有一个父母)。

    目前,由于alpha 分支显然合并到master 分支,github 只处理关闭 PR 的情况1。而对于情况2,由于提交C'只有一个父提交A,因此PR不会被关闭。

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 2013-05-25
      • 2012-03-24
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多