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

mac*_*ann 14 git version-control merge

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

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

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

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

Mar*_*ato 22

git cherry-pick A会做你想要的.它没有看到祖先 - 它只是看看已经应用了哪些变化.

这是一个例子:

git cherry-pick A
git cherry-pick A
git cherry-pick A
Run Code Online (Sandbox Code Playgroud)

只会创建一个新提交(最多).第二个和第三个命令是no-ops,因为A已经应用了更改.然而,

git cherry-pick A
git cherry-pick B
git cherry-pick A
git cherry-pick B
Run Code Online (Sandbox Code Playgroud)

将创建四个新提交.第一个和第三个提交都将执行相同的操作,而第二个和第四个提交将恢复第一个和第三个(即使提交B进行了其他更改而不是还原A.)换句话说,这是相同的

git cherry-pick A
git revert --no-edit HEAD
git revert --no-edit HEAD
git revert --no-edit HEAD
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


And*_*ehm -2

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

git.cmd branch YOURCOMMIT
Run Code Online (Sandbox Code Playgroud)

您可以使用镐来获取新分支所需的提交。