【问题标题】:Compare only changes in a commit with current working dir仅将提交中的更改与当前工作目录进行比较
【发布时间】:2012-08-17 00:28:36
【问题描述】:

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

【问题讨论】:

  • 不确定是否来自 SVN 导入的 repo,但我使用 git log .. 来查看是否包含分支,因此可以删除。我应该说 - 如果它被合并,它将不会产生任何结果。
  • 对,也可以使用 git remote prune 删除任何已合并的分支(显然是在远程服务器上)。然而,这些都是悬垂的树枝。

标签: git svn branch


【解决方案1】:

尝试合并一个分支:

git merge --no-commit  YourDanglingBranch

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

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

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

【讨论】:

  • 星期一会试一试 :)
【解决方案2】:

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

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

【讨论】:

  • 不幸的是,它们确实有不同的哈希值,我将更新问题以更好地展示这一点
猜你喜欢
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多