gpt4 book ai didi

git - 如何创建反射(reflect)另一个(发散)分支状态的提交?

转载 作者:太空狗 更新时间:2023-10-29 14:26:25 27 4
gpt4 key购买 nike

我想提交并将其复制到我的存储库中的其他地方。

现状:

A--B--C--D (branch1)
\
E--F (branch2)

期望的情况:

A--B--C--D--F'(branch1)
\
E--F (branch2)

F 保留在存储库中很重要。我不想重写历史,因为 F 可能是公开的。

F 和 F' 表示的存储库(源代码)的状态应该完全相同。是的,引入 C 和 D 的内容可能会丢失。

想在 D 之上重播 E 和 F。我研究了 cherry-pickrebase,但是它似乎他们删除了原始提交或只是重播目标之上的更改。

最佳答案

这一点是重点,我第一次评论的时候漏掉了:

The state of the repository (source code) represented [by] F and F' should be exactly the same. Yes, what was introduced C and D might be lost.

在这种情况下,从 git checkout branch2 开始,您可以使用 Stephen Newell's answer ,但还有一种更简单,还有一种更简单:

$ git rm -r .
$ git checkout <hash-of-F> -- .
$ git commit

它的工作原理是从索引中删除所有内容(并将其从工作树中删除)以确保没有来自早期提交的杂散文件保留,然后将提交 F 中的所有内容提取到索引中并工作树,准备提交。

您可以使用以下方法进一步缩短这一步骤:

$ git read-tree -m -u <hash-of-F>
$ git commit

因为这个 git read-tree 相当于删除和替换。

您可以使用名称 branch1 而不是提交 F 的哈希,直到 branch1 本身移动并且不再指向提交 F.

关于git - 如何创建反射(reflect)另一个(发散)分支状态的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49805443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com