同步2个具有不同历史记录的存储库

时间:2019-08-22 20:32:12

标签: git

所以我目前有2个仓库:

repoA:branchA

repoB:branchB

按代码顺序它们是相同的,但是分支上的历史记录是差异的。当我工作时,我纯粹是在repoB:branchB中工作(因此打开PR,获得批准,合并)。完成之后,我想将“合并”提交镜像到repoA:branchA。我该如何完成?考虑到他们有不同的历史?也许我可以选择承诺吗?因此,总的来说,我想同步repoA:branchA和repoB:branchB,即使它们有不同的历史。我只需要从repoB:branchB复制到repoA:branchA的特定提交即可。

谢谢!

1 个答案:

答案 0 :(得分:1)

历史记录,在Git中,在存储库中的提交。历史记录是通过在每个分支中采用 last 提交(通过分支名称找到)并在向后指向的链中进行反向操作来完成的,在每个指向中,每个提交都通过哈希ID标识其父级。您以这种方式或从任何其他名称(例如标记名)可以到达的所有提交都是存储库的一部分。有关更多信息,请参见Think Like (a) Git

通过将git fetch用于具有其他历史记录的远程目录或URL,可以建立具有多个不同历史记录的存储库(不同的断开连接的图)。由于缺乏共同祖先,这些历史很难合并,但是git cherry-pick仍然适用于它们。选择一个提交,使用git cherry-pick将其直接父级视为一种合并基础,Git将在该提交的父级,该提交和您当前的提交之间进行三向合并。

因此,如果您在仓库A中,而您想要的更改是在仓库B中在提交 P C (其中 C >是孩子),您可以运行:

git fetch <url-of-repo-B>
git cherry-pick <hash-of-C>

请注意,这会带入存储库B的全部历史记录。这无害,除了存储库暂时变大的事实。最终,这些提交如果不被引用,将会过期并被垃圾回收。

相关问题