【问题标题】:How do I list branches that are merged after a rebase?如何列出变基后合并的分支?
【发布时间】:2020-11-21 11:00:14
【问题描述】:

在 Azure DevOps 中,我的 PR 策略设置为“半线性”,这意味着当您合并拉取请求时,它会先变基,然后再合并。

这使得清理本地分支变得非常困难,因为我的普通git branch --merged origin/master 不支持这种情况。

如何可靠地批量确定哪些本地分支已“有效合并”,以便我可以删除它们?

注意:我将push.default 设置为current,并且始终将远程跟踪分支设置为origin/master。因此,任何依赖于检查每个本地分支的上游远程跟踪分支的解决方案都将不起作用(尽管我确实使用相同的名称将我的分支推送到远程;我们只是不能依赖远程跟踪分支)。我想提一下这个细节,以防万一任何解决方案都会利用远程跟踪分支。

免责声明:我找到了a similar SO question,但就我而言,它没有可接受的答案。因此,如果人们没有盲目地将我的问题标记为重复,我将不胜感激。

【问题讨论】:

  • 您能否确定您不能相信不再存在的远程正确识别可以安全删除的本地分支的情况? (即,在您的场景中不起作用的另一个问题的答案是什么?具体来说,我相信 Anton Styagun 的答案是正确的,尽管它还没有被标记为这样。如果这个问题有一个好的回答,它也会回答你的吗?)

标签: git


【解决方案1】:

我能想到的一种方法是尝试(试运行)主题分支的变基到 origin/master - 如果它创建 no 新提交,则可以安全地删除主题分支

这是因为默认情况下rebase 不会创建空提交

另一种方式(也许更干净)是:

git switch -c temp-topic-branch topic-branch
git merge origin/master
git reset --mixed origin/master
git status -s

如果git status -s 导致空输出 - 可以安全地删除主题分支

【讨论】:

  • 我有这个确切的想法。我不想猜测它需要多长时间(即使是自动化的),但它应该可以工作......
  • 我的一个要求是我能够批量执行此操作。对每个单独的分支进行变基可以自动化;但这将是不平凡且缓慢的。我想应该有一种方法可以使用较低级别的管道命令来更好地实现这一点,尤其是在可能的情况下只使用索引。
猜你喜欢
  • 2013-08-30
  • 2013-12-21
  • 2021-10-16
  • 1970-01-01
  • 2017-08-04
  • 2020-10-20
  • 2013-06-03
  • 2017-01-09
  • 1970-01-01
相关资源
最近更新 更多