git 仓库回滚代码到某个commit版本(本地和仓库都会回滚)

git维护代码版本信息是根据commit快照版本来维持的,每一次提交都会生成一个新的commit 对象,下面我们直接看下怎么回归。

Git回滚代码到某个commit

回退命令:

$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id 退到/进到 指定commit的sha码

强推到远程:

$ git push origin HEAD --force

这里可以看到我们其实是reset 了head 指向commit版本的指针,那么结构大致是什么样子呢;

上面一个图 左边很好理解,右便可能有很多人不知道是什么?

我们知道git是基于快照的方式进行代码管理,其实每次commit的时候,只会根据每个有修改的文件生成一个新的file blob,此时就会存在该file的多个版本blob文件,再由tree object 维护一次commit 中的快照文件关系,最后生成一个Commit object 指向了tree object 以及上一个Commit object 和一些额外的信息比如作者,时间等。

我们还要清楚其实,我们的git在工作的时候,存在三个区域来进行文件管理,通过三个区域文件的变化,来完成我们git对代码的管理,如下图: