首页 > 解决方案 > 如何重新定位整个提交图?

问题描述

在此处输入图像描述

我们有一个项目存储库left

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

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


注意:缝合点包含完全相同的变更集,不涉及冲突。

标签: gittreerepositorybranchrebase

解决方案


注意:缝合点包含完全相同的变更集,不涉及冲突。

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

最有可能的命令:

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

如果我理解得很好,您想将第一个蓝色提交与最后一个橙色提交链接,这些提交包含完全相同的内容。

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

所以命令应该是:

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

完成后,验证历史记录。

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

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

来自文档:

注意:此命令尊重 .git/info/grafts 文件和 refs/replace/ 命名空间中的 refs。如果您定义了任何移植或替换参考,运行此命令将使它们永久化。

它将修改 blue 和后续提交的历史记录,因此,要推送它,您将有义务git push --force-with-lease为所有已更新的 refs 执行 a。

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


推荐阅读