我有一个非常大的回购需要一些清理。回购来自SVN并且开始时很混乱。
有许多分支,其中一些被合并到主干,而其他分支则没有。不幸的是,SVN没有跟踪这个,因此SVN的合并/未合并分支看起来是一样的。 (因为分支只是在风中悬挂)
我想修剪掉这些无关紧要的树枝并清理一下。
如何获取提交的SHA1,并仅比较该提交中发生的更改与master中的更改? (因此,如果某个分支的提交中的所有更改都在master中,我可以删除分支,否则我可以适当地维护分支。)
树的例子:
o--o--o--o--o Unmerged from SVN
/
o--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o Master
\ \ /
o--o--o Merged from SVN o--o--o
(请注意,就Git而言,两个分支如何不合并回master中,但在其中一个分支中,所有更改都在master中,因为它是SVN仓库时合并的,这个我要删除)
答案 0 :(得分:2)
尝试合并分支:
git merge --no-commit YourDanglingBranch
这将尝试合并YourDanglingBranch,但实际上并没有提交。
如果YourDanglingBranch已经合并,git足够智能,在我的测试中什么都不做。因此,只需使用git merge --abort
完成此分支,安全地删除它并继续使用另一个分支。
如果YourDanglingBranch尚未合并,则无需提交即可完成合并。您可以检查更改,解决可能的冲突,然后提交合并版本。
答案 1 :(得分:1)
分支是否有不同的哈希值?如果没有,只需运行git checkout master && git branch -d <branch>
并完成它。使用小写-d
标志,git将拒绝删除未合并到已签出分支的分支(在此示例中为master
,但它可以是您选择的任何分支)。< / p>
事实上,您可以轻松地自动完成此操作。 This answer显示一个git别名,它将删除未与当前分支合并的任何分支。看它工作有点可怕,但效果还不错。