说我有很久以前的修订版A,并做了一个理想的改变。
然后,稍后,我有了修订版B,对许多文件进行了大量修改,包括删除更改A.
现在,很久以后,我想重新应用修订版A.是否有一个好方法可以做到这一点? merge和cherry-pick命令似乎跳过了祖先的修订,我没有看到任何标志来忽略祖先。
总有差异/应用,但那些真的是最好的方式吗?看起来这可能是“有损”(通过中间补丁格式)并且可能不允许git正常使用所有工具......但这对我来说是一个无知的预感。
答案 0 :(得分:22)
git cherry-pick A
将完全按照您的意愿行事。它没有看到祖先 - 它只是看看已经应用了哪些变化。
以下是一个例子:
git cherry-pick A
git cherry-pick A
git cherry-pick A
只会创建一个新提交(最多)。第二个和第三个命令是无操作,因为A
的更改已经应用。然而,
git cherry-pick A
git cherry-pick B
git cherry-pick A
git cherry-pick B
将创建四个新提交。第一个和第三个提交都将执行相同的操作,而第二个和第四个提交将恢复第一个和第三个(即使提交B
进行了其他更改而不是还原A
。)换句话说,这是与
git cherry-pick A
git revert --no-edit HEAD
git revert --no-edit HEAD
git revert --no-edit HEAD
希望这有帮助。
答案 1 :(得分:-2)
您可以使用git checkout $ REVISION切换回修订版(提交)。然后你应该从那里创建一个新的分支。
git.cmd branch YOURCOMMIT
您可以使用pickaxe获取新分支所需的提交。