【问题标题】:Can we say that a git revert merges the old previous commits on top of the reverted commit?我们可以说 git revert 将旧的先前提交合并到恢复的提交之上吗?
【发布时间】:2015-05-02 15:59:37
【问题描述】:

我正试图绕过git revert

我来自 Clearcase 背景,要撤消错误的提交,您可以:

  1. 在错误提交的文件之上签入旧版本的文件(仅 Clearcase 上的文件级提交)
  2. 删除提交的元素
  3. 在版本树中,将以前的版本合并到当前版本中,以创建与最新提交之前的版本相同的新版本。

现在在我看来,git revert 自动等同于 (3) 中的手动工作。

我的问题是:我们可以说 git revert 将旧的先前提交合并到恢复的提交之上吗?

【问题讨论】:

标签: git merge clearcase git-revert


【解决方案1】:

简而言之

git revert 创建您要撤消的提交的逆向提交。然后将新的变更集提交到存储库中。

请参阅 2.4 Git Basics - Undoing Things 中的取消修改已修改文件部分。

所以,不,你不能说:

我们可以说 git revert 将旧的先前提交合并到 还原的提交?

因为您可以还原存储库历史记录中的任何提交。

示例

假设你有这段历史:

C1 <-- C2 <-- C3 (HEAD)

这意味着,如果您想恢复提交 C2,则不要提交“旧的先前提交”,即 C1。因为那样你最终会得到

C1 <-- C2 <-- C3 <-- C1 (HEAD)

你没有。你最终得到了

C1 <-- C2 <-- C3 <-- C2' (HEAD)

C2'C2 的倒数,C3 仍然是你历史的一部分。

插图

这里是上述解释的图解,taken from here

【讨论】:

    【解决方案2】:

    不要忘记那些 ClearCase 选项是逐个文件的。

    git revert 通过提交工作(这有点像 UCM 活动),这意味着它将还原该提交中引用的所有文件。

    对于仅恢复特定文件,“Reset or revert a specific file to a specific revision using Git?”中有其他选项。

    【讨论】:

    • 感谢@VonC - 永远感谢您为我的 clearcase 搭建桥梁->GIT 知识
    【解决方案3】:

    不完全是。 git revert 将为您选择恢复的每个提交创建一个新的提交对象,并且每个提交对象将分别与您选择恢复的每个提交完全相反。

    意思是,如果你 git revert C1,那么 git 将创建 C1R,它完全反转了 C1 所做的所有更改。

    【讨论】:

    • 这是一个非常简洁明了的答案,用最少的单词抓住了问题的本质。 (对不起 - 另一个人有一个图表)。
    猜你喜欢
    • 2016-01-08
    • 2013-04-28
    • 2017-09-26
    • 2016-06-23
    • 2016-04-17
    • 2011-06-27
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多