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

14

假设我有一个很久以前的修订版本A,并且它进行了一些理想的更改。

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

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

总是可以使用 diff/apply,但那是否真的是最好的方法呢?这似乎可能是“有损”的(通过中间的补丁格式),并且可能不允许 Git 使用其通常可用的所有工具... 但这只是我个人的无知猜测。


2
git |git| 名词,英国俚语 指一个不愉快或可鄙的人。这句话的意思是:使用 git 一切皆有可能。 - user142019
2个回答

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

希望这可以帮到你。


-2

您可以使用 git checkout $REVISION 命令切换回您的修订版(Commit)。然后,您应该从那里创建一个新分支。

git.cmd branch YOURCOMMIT

您可以使用 pickaxe 获取您的新分支所需的提交记录。


我不明白。我不想要一个新的分支;我想在同一分支内重新应用过去的修订。 - mackstann
我理解您的观点,但使用一个新分支会更容易。当您的pickaxe过程完成并将其合并回来后,您可以安全地删除它。在git中,分支是廉价且容易的。 - Andreas Rehm
但是当我回到过去的分支时,将来如何将修订版合并到主分支中呢? - mackstann
如果你的修订版本不仅仅是一个提交,使用WinMerge可能会更容易。问题是 - 你所说的“修订版本”是什么意思? - Andreas Rehm
你可以通过合并将其恢复 - 你会遇到需要手动解决的合并冲突。 - Andreas Rehm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接