1

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

4

2 回答 2

2

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

git merge --no-commit  YourDanglingBranch

这将尝试合并 YourDanglingBranch 但实际上并不进行提交。

如果 YourDanglingBranch 已经合并,那么 git 足够聪明,可以在我的测试中什么都不做。所以只需使用git merge --abort完成这个分支,安全地删除它并继续另一个。

如果 YourDanglingBranch 尚未合并,则无需提交即可完成合并。您可以检查更改,解决可能的冲突,然后提交合并的版本。

于 2012-08-17T16:02:39.263 回答
1

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

事实上,您可以轻松地自动执行此操作。这个答案显示了一个 git 别名,它将删除任何未与当前分支合并的分支。看着它工作有点可怕,但它工作得很好。

于 2012-08-17T12:43:59.573 回答