Git | 如何恢复代码的提交

163 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情

不同的工作场景中选择合适的方式进行Git操作也是很重要的,今天来分享一下在工作中如何对提交的代码进行回退

项目中需求的变更,或者是一次不小心的手抖提交了不合适的代码,可能需要来一次“后悔药”,也是就回退代码,将代码撤回到历史版本。

Git 代码回退

在Git中,代码回退有两种指令:reset 和 revert,它们都可以用来回退commit的版本。

让我们先来看看这两个单词的含义:

它们的含义很相似,但使用时有很大的区别,reset 【重置】 有一种重头开始的感觉, 要比 revert 【恢复】 的作用更强,revert 相比来说更安全。

image.png

image.png

reset 和revert

  1. git reset:彻底回退,到指定的commit版本,该commit后的所有commit都将被清除(包括提交记录)。执行后不会产生记录。
    • git reset <ID>:可以指向ID,如果没有指定ID,默认使用HEAD(后面会解释HEAD)
    • git reset --hard :强制恢复 commit
    • git reset --soft :恢复commit的同时,还会保留节点的修改内容 (恢复的不只是一次commit,而是恢复这个 commit 到最新一次 commit 期间的所有修改的内容),此节点之后的节点提交的内容都会放在暂存区。
  2. git revert:只撤销指定commit的修改,不会影响后面的commit。执行后会产生记录。

如何选择

  • 回退的代码以后还可能使用:git revert
  • 回退后不再需要之前的代码,则使用git reset

扩展

这里要提到一个HEAD指针的概念:它表示指向当前分支的最新提交(commit)的指针,可以在任意分支进行切换,随分支的改变而改变。 图中HEAD所指向的master为当前分支,master分支指针指向最近一次提交:

image.png

使用git log指令打印相关的提交日志后,可以看到一串哈希码,以及 HEAD -> 分支名称,如下图:

image.png

前面在 reset 或者 revert 时用到的 HEAD 就是这串哈希码。