【问题标题】:With Git, is it possible to re-apply an ancestor revision?使用 Git,是否可以重新应用祖先版本?
【发布时间】:2011-03-18 17:30:43
【问题描述】:

假设我有一个很久以前的版本 A,并且做了一个令人满意的改变。

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

现在,很久以后,我想重新应用修订版 A。有什么好的方法吗? merge 和 cherry-pick 命令似乎跳过了祖先的修订,我没有看到任何忽略祖先的标志。

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

【问题讨论】:

  • git |git| noun Brit., informal an unpleasant or contemptible person. 这意味着:使用 git 一切皆有可能。

标签: git version-control merge


【解决方案1】:

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 切换回您的修订版(提交)。然后你应该从那里创建一个新的分支。

    git.cmd branch YOURCOMMIT
    

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

    【讨论】:

    • 我不明白。我不想要一个新的分支;我想在同一个分支中重新应用过去的修订。
    • 我明白这一点。但是使用新分支更容易做到这一点。您可以安全地删除它 - 一旦您的镐过程完成并将其合并回来。分支在 git 中既便宜又容易。
    • 但是当我在我的回到过去的分支中时,我如何在将来将修订版导入到 master 中?
    • 如果您的 Revision 不仅仅是一次提交,使用 WinMerge 可能会更容易。问题是 - 修订是什么意思?
    • 您可以通过合并将其恢复 - 您会遇到合并冲突,您需要手动解决。
    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    相关资源
    最近更新 更多