[英]Display local branches that have been "squashed & merged" into master
在我们团队的存储库中,我们通过提交 PR 来工作,我们只使用 github 的压缩和合并功能将它们合并到 master 中。 对我来说,问题是我再也看不到使用git branch --merged
合并到 master 中的分支,因为这不会显示已被压缩和合并的分支。 我当地的分支机构堆积如山,要逐一审查它们以查看我可以删除哪些是一件痛苦的事情。 还有其他方法可以列出它们吗?
tl; dr; 很不幸的是,不行。 您必须在GitHub上检查PR的状态,并在合并后用git branch -D
强制删除本地分支。
GitHub Squash和merge操作实际上并没有合并您的主题分支 -而是将来自该分支的所有提交压缩为一个,然后在目标分支之上对提交进行重新基准化 。
从文档中 :
当您在GitHub上的请求中选择Squash and merge选项时,请求的提交将被压缩为单个提交。
最重要的部分是:
使用快速转发选项合并具有压缩提交的拉取请求。
快进合并不会创建合并提交-只是将目标分支引用向前移动,使其指向与源分支相同的提交。 仅当源分支指向目标分支的后代时才可以这样做。
因此,如果您的主题分支在本地存储库中看起来像这样:
master
v
o--o--o--o
\
A--B--C <- This is the branch you want to merge with a PR
^
topic
当您使用Squash和merge时 ,GitHub将重写 topic
分支的历史记录 ,使其看起来像这样:
master
v
o--o--o--o
\
S <- This is A, B and C squashed together
^
topic
然后,将GitHub的重订 topic
之上master
。 注意,由于父对象不同 ,这将导致提交与原始压缩的提交S
不同。 为了区别它,我们称重定基础的提交S'
( S prime ):
master
v
o--o--o--o
\
S'
^
topic
最后, topic
分支通过快速合并合并到master
:
master
v
o--o--o--o--S'
^
topic
这一切都发生在GitHub服务器托管的存储库中。 同时,在您的计算机上,存储库仍如下所示:
master
v
o--o--o--o
\
A--B--C
^
topic
完成git pull
on master
,您将收到压缩后的重新提交S'
:
master
v
o--o--o--o--S'
\
A--B--C
^
topic
Git无法知道提交S'
包含A
, B
和C
的组合更改。 这就是为什么它将仍然报告topic
为未合并的原因 。
莱纳斯·托瓦尔兹曾经写道 :
人们可以(也许应该)为自己的私有树(他们自己的工作)建立基础。 那是清理工作 。 但是从来没有其他人编写代码。 那是“毁灭的历史”。
然后,他继续:
您绝对不能破坏他人的历史。 您不得重新基准其他人所做的提交。 基本上,如果没有您的批准,那就超出了限制:您无法将其作为基准,因为它不是您的。
显而易见,GitHub的Squash and merge功能通过完全重写其PR分支破坏了其他人的历史。
我不会在这里告诉您壁球和合并本质上是邪恶的 -我敢肯定它有其用途。
但是,如果您的团队经常发现自己必须处理陈旧的本地分支机构(如您所述),则可能需要考虑切换到合并工作流程的合并工作流程,而不是破坏它,而将PR的历史记录保持原样 。
git branch --merged master
列出合并到master的分支
git branch --merged
列出合并到HEAD中的分支(即当前分支的尖端)
git branch --no-merged
列出尚未合并的分支
默认情况下,这仅适用于本地分支。 -a标志将显示本地和远程分支,-r标志仅显示远程分支。
希望这会有所帮助。
我使用 PR 和 squash 合并遇到了同样的问题,并根据具有上游分支的分支发出了一个小命令来清理不需要的分支。
它还避免删除主分支,如master
、 develop
和release
:
git branch -d $(git branch --format "%(refname:short) %(upstream)" | awk '{if ($2) print $1;}' | grep -vE "release|develop|master") -f
我使用这个问题的答案做到了: List all local branches without a remote
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.