我有两个相同的Git仓库分支,我想检查它们是否完全相同,以便安全地删除其中一个而不会丢失任何信息。虽然我知道如何比较单个分支,但我想问是否有一种简单的方法可以比较所有分支、标签等。
最快的方法是添加第二个远程仓库,然后比较每个 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
上;修改是当该分支/标签存在于两者上但在每个上指向不同的提交时。
A
中将仓库B
作为远程添加,然后在A
内从B
获取。$ git remote add B {local-path-or-url-of-B}
$ git fetch B
B
中存在的所有分支和标签也存在于A
中,可以使用git branch -v
查找本地分支并与远程分支(git branch -r -v
)进行比较。--
目前,几乎所有在B
中的内容也都在A
中(存储库除外)。您可以使用rebase、merge、cherry-pick等方法将从B
导入的分支和提交追加到A
中存在的分支中(或反之亦然)。
您可以删除B
存储库,但不要删除A
的B
远程,直到您确定需要在A
中使用的B
中的所有内容都可以使用A
的标签或分支访问。
这取决于你说的“等等”具体是什么意思——它举例来说不能帮助你处理钩子、.git/config以及一般不涉及引用之外的任何事情——但比较两个仓库中 git show-ref
命令的输出结果可能是检测它们是否不同的简单方法。
git branch --contains <commit-id>
。 - cmbuckley