git - 如何重新定位整个提交图?
问题描述
我们有一个项目存储库left
。
right
然后我们从最上面的快照创建了一个克隆存储库left
(并在那里工作了几个星期)。
我们如何合并这两个图?
(让团队在两者之间合并)
注意:缝合点包含完全相同的变更集,不涉及冲突。
解决方案
注意:缝合点包含完全相同的变更集,不涉及冲突。
所以,我认为你应该使用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:也有可能推送被替换的对象(这里是一个解决方案),但这不是推荐的解决方案。
推荐阅读
- javascript - 使用 geofirestore 反应原生 Firebase 云功能
- python - 更高效的时间增量计算python 3
- motordriver - 计算启动停止命令后步进电机的停止时间
- wordpress - 使用 apache proxypass 重定向到 /blog (wordpress)
- scala - 在 Spark Streaming 中处理太晚的数据
- r - 发生错误“权重总和不为 1”,但它们总和为 1(R 的 MCDM 包)
- javascript - 可以在 Vuex 中使任意对象具有响应性吗?
- android - Android芯片文字未显示
- mysql - 条件左连接或 Where SQL 查询
- javascript - javascript-如何使用键从数组数组中提取值