仅比较提交中的更改与当前工作目录

时间:2012-08-17 00:28:37

标签: git svn branch

我有一个非常大的回购需要一些清理。回购来自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仓库时合并的,这个我要删除)

2 个答案:

答案 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别名,它将删除未与当前分支合并的任何分支。看它工作有点可怕,但效果还不错。