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

Git 仅将提交中的更改与当前工作目录进行比较,git,svn,branch,Git,Svn,Branch,我有一个非常大的回购协议,需要一些清理。回购协议来自SVN,一开始就很混乱 有许多分支,其中一些被合并到主干中,而另一些则没有。不幸的是,SVN没有跟踪这一点,因此来自SVN的合并/未合并分支看起来是一样的。 (就像风中悬挂的树枝) 我想把这些多余的树枝剪掉,把东西清理一下 如何获取提交的SHA1,并仅将该提交中发生的更改与master中的更改进行比较?(因此,如果某个分支的提交中的所有更改都在master中,我可以删除该分支,否则我可以适当地维护该分支) 树的示例: o-

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

分支是否有不同的散列?如果没有,只需运行
git checkout master&&git branch-d
并完成它。使用小写的
-d
标志,git将拒绝删除未合并到签出分支中的分支(在本例中为
master
,但它可以是您选择的任何分支)


事实上,您可以轻松地将其自动化。显示将删除未与当前分支合并的任何分支的git别名。看着它工作有点可怕,但它工作得很好。

无论如何尝试合并一个分支:

git merge --no-commit  YourDanglingBranch
这将尝试合并悬挂分支,但实际上不执行提交

如果您的悬挂分支已经合并,git足够聪明,可以在我的测试中不做任何事情。所以只需使用
git merge--abort
来完成这个分支,安全地删除它并继续另一个分支


如果尚未合并悬挂分支,则合并将在不提交的情况下完成。您可以检查更改,解决可能的冲突,然后提交合并版本。

不确定是否来自SVN导入的回购,但我使用了git日志。。查看是否包含分支,从而可以删除分支。我应该说,如果合并了,它将不会产生任何结果。对,也可以使用git remote prune,它将删除任何已合并的分支(显然是在远程服务器上)。然而,这些都是悬而未决的分支。不幸的是,它们确实有不同的散列。我将更新这个问题,以更好地说明这一点。我将在周一尝试:)