我想进行提交并将其复制到我的存储库中的其他位置.
现在的情况:
A--B--C--D (branch1)
\
E--F (branch2)
Run Code Online (Sandbox Code Playgroud)
期望的情况:
A--B--C--D--F'(branch1)
\
E--F (branch2)
Run Code Online (Sandbox Code Playgroud)
F保留在存储库中非常重要.我不想重写历史,因为F可能是公开的.
表示F和F'的存储库(源代码)的状态应该完全相同.是的,引入的C和D可能会丢失.
我不希望重播E和F在D的顶部我已经调查cherry-pick和rebase,但似乎他们删除原提交或干脆重播目标的顶部的变化.
这一点是一个关键项目,我在第一次评论时错过了:
由[F]和F'表示的存储库(源代码)的状态应该完全相同.是的,引入的C和D可能会丢失.
在这种情况下,从git checkout branch2你开始,你可以使用斯蒂芬纽厄尔的答案,但有一个更简单,而且更简单:
$ git rm -r .
$ git checkout <hash-of-F> -- .
$ git commit
Run Code Online (Sandbox Code Playgroud)
它的工作原理是从索引中删除所有内容(并从工作树中删除),以确保没有保留早期提交的杂散文件,然后从提交F到索引和工作树中提取所有内容,准备提交.
您可以使用以下步骤缩短这一步:
$ git read-tree -m -u <hash-of-F>
$ git commit
Run Code Online (Sandbox Code Playgroud)
因为这git read-tree相当于删除和替换.
您可以使用名称branch1而不是提交的哈希,F直到branch1它自己移动并且不再指向提交F.
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |