![](/img/trans.png)
[英]Git : How to delete all local branches (merged or not), except master and develop
[英]How can I delete all local branches which would result in no changes if merged into master?
我知道如何删除已合并的所有本地分支 。 但是,我相信这是由于Github的新拉动请求压缩和合并功能,我发现自己留下了许多未合并的本地分支,但如果合并到master中将导致没有变化。
如何修剪这些本地分支,即那些未必合并但不会影响主分支(或更一般地说,当前分支)的本地分支?
没有完美的解决方案,但你可以接近,也许足够接近。
一定require_clean_work_tree
干净的工作树和索引开始(请参阅git-sh-setup
require_clean_work_tree
)。
对于可能可删除的每个候选分支$branch
:
merge_target=$(git config --get branch.${branch}.merge)
)。 查看合并目标。 --no-commit
合并; 或者在步骤1中,使用--detach
检查,以便在合并成功时获得可以放弃的提交。 --detach
),你可以非常简单地完成最后一次测试,没有任何差异:运行git rev-parse HEAD^{tree}
和git rev-parse HEAD^^{tree}
1并查看它们是否产生相同的哈希值。 如果不允许犯,你仍然可以git diff
的电流( HEAD
)提交反对提出的合并。 如果你需要从diff中删除一些噪音(例如,配置文件不应该,但无论如何,在提交中),这给你一个地方去做。 git merge --abort; git reset --hard HEAD; git clean -f
或类似,具体取决于你决定如何实现步骤1-3)。 这只是为了让您的工作树和索引再次清理,以便下一次传递。 实质上,这是“实际上合并,看看会发生什么”,只是完全自动化。
1这个符号看起来有点怪异,但它只是HEAD^
的-the第一个父HEAD
通过-followed ^{tree}
。 替代拼写可能更容易阅读: HEAD~1^{tree}
或${merge_target}^tree
,其中${merge_target}
是您在步骤1中检出的分支。请注意,这假设合并成功。 合并结果处于git merge
的退出状态:零表示成功,非零表示失败,需要手动帮助,可能是由于合并冲突。
如果你运行git“branch -v”,那些有变化的跟踪分支将在它们旁边写下“前面”。
另外两个选项:“后面”并且如果没有写入,则意味着分支没有会影响它们跟踪的分支的更改。
因此,你可以运行“git fetch”来更新远程跟踪分支,然后解析“git branch -v”结果,找出哪些分支没有变化,哪些分支有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.