如何重新建立整个提交图?

时间:2018-11-07 07:43:12

标签: git tree repository branch rebase

enter image description here

我们有一个项目存储库left

然后,我们从right的最高快照创建了一个克隆存储库left(并在那里工作了几周)。

我们如何合并两个图
(以使团队在两者之间合并)


注意:切点包含完全相同的变更集,没有冲突。

1 个答案:

答案 0 :(得分:1)

  

注意:切点包含完全相同的变更集,没有冲突。

所以,我认为您应该使用git replace

最有可能的命令:

git replace --graft <commit> [<parent>…​] 

如果我理解得很好,您希望将第一个蓝色提交与最后一个橙色链接相关联,后者是包含完全相同内容的提交。

命令稍微复杂一点,因为最后一个橙色提交是合并提交,因此您应该在命令行中使用两个父级的sha1(倒数第二个橙色和最后一个绿色)。

所以命令应该是:

git replace --graft <Sha1_of_first_blue_commit> <Sha1_of_second_to_last_orange_commit> <Sha1_of_last_green_commit>

完成后,验证历史记录。

如果不合适,请删除替换的提交。

如果适合您,那么您应该使用git filter-branch通过在替换提交后重写所有历史记录来使其永久(使用git filter-branch -- --all)。

来自文档:

  

注意:此命令支持.git / info / grafts文件和refs / replace /名称空间中的refs。如果定义了任何嫁接或替换引用,则运行此命令将使它们永久化。

它将修改蓝色和后续提交的历史记录,因此,要推送它,您将必须对所有已更新的引用执行git push --force-with-lease

PS:也有可能推送替换的对象(解决方案here),但这不是推荐的解决方案。