我有一组彼此派生的存储库。不是为每个主要修订创建一个新分支,而是使用旧A的最后一个状态创建一个新的回购B.
我试图将这些可怜的东西重新组合在一起,但为了做到这一点,我需要找出A中的哪个提交是B的初始提交。
我该怎么做?
编辑:请注意,无法确定B的初始提交包含与A提交之一相同的来源。例如,可能已更改Makefile或其他内容以容纳项目的新名称。
答案 0 :(得分:1)
好吧,我希望B
中初始提交的源代码树 完全与{{1}中的某些提交相同}}。在这种情况下,您可以相对轻松地解决问题:
首先查看A
:tree
中第一次提交的B
字段,并记住树的SHA-1。
现在您可以在A存储库中执行git log --pretty=raw <B_initial_commit>
并尝试找到此SHA-1。如果你发现这样的提交,那就宾果!你有必要的(实际上可能有一些,但是没关系,因为所有这些提交都有完全相同的源树,只需选择任何一个)。
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'中的提交逐一对应,因此您可以获得解决方案。