我有以下 Git 提交树:
R - A - B - C - D (master)
我愿意:
R - A - B - D' (master)
\ - C (new-branch)
我该怎么做(假设它甚至可能)?
我开始使用 git cherry-pick
但我没能从 master 分支中删除提交。
谢谢。
最佳答案
你不能得到你想要的,因为提交会有所不同,但如果你这样做,文件的内容将是你想要的:
$ git checkout master $ git reset --hard sha1-of-B # set master back to B $ git cherry-pick sha1-of-D # set master to R-A-B-D' $ git checkout -b new-branch sha1-of-B # set new-branch to B $ git cherry-pick sha1-of-C # set new-branch to R-A-B-C'
请注意,您实际上并不需要挑选来设置新分支,您可以轻松地做到这一点:
$ git reset sha1-of-C
当您 checkout 新分支时。这实际上会给你 R-A-B-C 而不是 R-A-B-C'。请注意,C 和 C' 之间的唯一区别是提交时间。
一旦你进行了重置,你可能很难找到各种提交的 sha1 散列(它们可以从 reflog 中获得),所以你可能想在开始之前给所有东西加上标签,或者将历史存储在某个地方.
关于git - 将任何 Git 提交从一个分支移动到另一个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992048/