【问题标题】:Git: revert on older commitGit:恢复旧提交
【发布时间】:2016-06-23 02:13:52
【问题描述】:

我对我的 git repo 做了一些更改并提交了一些内容。这是我想做的,说我的 git 历史看起来像 HEAD --> c1 --> c2 --> c3 --> c4。 问题 1) 现在如果我恢复 c1,它是否也会恢复所有 c2、c3、c4 ?我的理解是它只恢复 c1 并保持 c2、c3、c4 不变。 2) 现在我想恢复所有 c1、c2、c3 和 c4 并返回 HEAD。最好的方法是什么。

【问题讨论】:

    标签: github commit head revert


    【解决方案1】:

    如果您将 c1 恢复为 c1 状态,但它会创建新的提交 (c5),其中包含从 c4 到 c1 的所有更改。

    [HEAD]--> c1 --> c2 --> c3 --> c4 --> c5 (c1 state)
               |__________________________/\
                         revert
    

    【讨论】:

      【解决方案2】:

      Revert 将创建一个提交,该提交将撤消您要恢复的修订版本的更改。

      如果你这样做:

      git revert c1
      

      你会以:

      revertC1 -> (前一个 HEAD) -> c1 -> c2 -> c3 -> c4 ...

      而且它只会恢复提交的更改。

      因此,对于您想要删除 HEAD 之前的四个提交的场景:

      头 -> c1 -> c2 -> c3 -> c4

      等同于:

      头 -> 头~1 -> 头~2 -> 头~3 -> 头~4

      如果您想删除当前提交之前的四个提交。你可以做

      git revert HEAD~5..HEAD~1
      

      系统将提示您为每个还原创建提交消息,并可能解决冲突。

      如果您没有推送您的更改,我会做些什么来保持历史日志干净:

      撤消当前提交并保留代码更改

      git reset --soft HEAD~1
      

      存储代码更改

      git stash
      

      撤消最后四次提交并擦除代码更改

      git reset --hard HEAD~4
      

      确保我删除了所有创建的文件和目录

      git clean -di
      

      重新应用我想要保留的顶部提交中的更改

      git stash pop
      

      *修复冲突,以防万一 当没有冲突时。提交我的更改

      git commit -am "My new changes"
      

      如果准备好推送,请推送。

      git push
      

      只有在您没有推送更改的情况下。

      【讨论】:

      • 这很有帮助。非常感谢。
      • 很高兴我能帮上忙。如果这可以帮助您解决问题,请将其标记为已接受的答案:D
      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2015-02-07
      • 2021-04-13
      相关资源
      最近更新 更多