我有两个同一个git存储库的分叉,我想检查它们是否完全相同,因此可以安全地删除其中一个而不会丢失任何信息。
虽然我知道如何比较单个分支,但我想问一下是否有一种比较所有分支,标签等的简单方法。
答案 0 :(得分:2)
最快的方法是添加第二个遥控器并比较git ls-remote
的每个输出:
diff -u <(git ls-remote --refs origin) <(git ls-remote --refs other)
--refs
选项会删除HEAD
之类的伪目标,这些伪目标可能指向每个遥控器上的不同分支。
您甚至不需要将遥控器添加到本地结帐;你可以运行类似git ls-remote https://github.com/username/repo.git
的东西。
如果看不到输出,则遥控器完全相同。如果您看到差异中的删除,则对应origin
上的分支,但不会other
上的分支;添加内容在other
上,但不在origin
上;和修改是两个分支/标记存在的位置,但每个分支/标记的位置不同。
答案 1 :(得分:1)
将存储库B
添加为存储库A
中的远程存储库,然后在A
内,从B
获取
$ git remote add B {local-path-or-url-of-B}
$ git fetch B
现在,B
中存在的所有分支和标记也存在于A
中,并且可以轻松地将本地分支(使用git branch -v
找到它们)与远程分支进行比较(git branch -r -v
)。
使用GUI Git客户端使比较更容易。
-
此时,B
中的几乎所有内容都在A
中(隐藏的内存丢失)。您可以使用rebase,merge,cherry-pick等将B
中导入的分支和提交附加到A
中的分支中(反之亦然)。
您可以删除B
存储库,但不要删除B
的{{1}}远程,直到您确定A
中的所有内容并且您需要可以使用B
的标记或分支来访问A
。
答案 2 :(得分:0)
这取决于“依此类推”是什么意思 - 它不会例如帮助你使用钩子,.git / config以及除refs之外的其他任何东西 - 但是比较两者中git show-ref
的输出存储库可能是一种检测它们是否不同的简单方法。