Git:找到两个存储库中最近的两个提交?

时间:2016-02-12 00:36:34

标签: git

我有一组彼此派生的存储库。不是为每个主要修订创建一个新分支,而是使用旧A的最后一个状态创建一个新的回购B.

我试图将这些可怜的东西重新组合在一起,但为了做到这一点,我需要找出A中的哪个提交是B的初始提交。

我该怎么做?

编辑:请注意,无法确定B的初始提交包含与A提交之一相同的来源。例如,可能已更改Makefile或其他内容以容纳项目的新名称。

1 个答案:

答案 0 :(得分:1)

好吧,我希望B中初始提交的源代码树 完全与{{1}中的某些提交相同}}。在这种情况下,您可以相对轻松地解决问题:

首先查看Atree中第一次提交的B字段,并记住树的SHA-1。

现在您可以在A存储库中执行git log --pretty=raw <B_initial_commit>并尝试找到此SHA-1。如果你发现这样的提交,那就宾果!你有必要的(实际上可能有一些,但是没关系,因为所有这些提交都有完全相同的源树,只需选择任何一个)。

然而,情况可能会稍微恶化。那些“克隆”B存储库的人可以省略一些文件(例如git log --pretty=raw或其他文件,这些文件不会使人类的源树不同,但是对于机器人来说却是不同的。)

编辑:这是案例的可能解决方案。我的想法是了解当B从A分叉并创建一个可以恢复此类更改的脚本时,对B的初始提交做了哪些更改。或者,如果更改太复杂而无法轻易还原,则只需从B和A中删除此类文件,然后再将结果源树再次与上述方法进行比较。

所以假设你制作了这样一个剧本,例如删除(部分)Makefile并在B上执行其他可能的更改,并为A执行另一个相应的脚本。然后使用git filter-branch树过滤器,从而从A和B创建2个新的存储库,我们称他们为A'和B'。然后,如上所述,您可以尝试使用与B'中初始提交的树的SHA1相同的SHA1来定位A'中的树。由于A和A'中的提交逐一对应,因此您可以获得解决方案。