使用Git,是否可以重新应用祖先修订版?

时间:2010-07-20 23:08:56

标签: git version-control merge

说我有很久以前的修订版A,并做了一个理想的改变。

然后,稍后,我有了修订版B,对许多文件进行了大量修改,包括删除更改A.

现在,很久以后,我想重新应用修订版A.是否有一个好方法可以做到这一点? merge和cherry-pick命令似乎跳过了祖先的修订,我没有看到任何标志来忽略祖先。

总有差异/应用,但那些真的是最好的方式吗?看起来这可能是“有损”(通过中间补丁格式)并且可能不允许git正常使用所有工具......但这对我来说是一个无知的预感。

2 个答案:

答案 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获取新分支所需的提交。