运用git的每次提交,git都会主动把它们串成一条时间线,这条时间线便是一个分支。在git里,有一个HEAD指针指向当时分支(只要一个分支的情况下会指向master,而master是指向最新提交)。每个版别都会有自己的版别信息,如特有的版别号、版别名等。如下图,假定只要一个分支:

git恢复版本的两种方法reset/revert

git reset

git reset的作用是修正HEAD的方位,即将HEAD指向的方位改变为之前存在的某个版别,如下图所示,假定咱们要回退到版别一:

git恢复版本的两种方法reset/revert

适用场景:假如想恢复到之前某个提交的版别,且那个版别之后提交的版别咱们都不要了,就可以用这种方法。

eb76a1e表明回退到commit是eb76a1e的方位
git reset --hard eb76a1e
// 然后push到长途,把长途的也回滚
git push origin HEAD -f 

这个时分就有个问题,假如是多人开发,现在有A同学去拉代码,他拉的代码仍然是回滚之前的,也便是你回滚之后,A同学无法拉到回滚之后的代码。那么这个时分需求A同学本地HEAD和线上的HEAD保持一直,运用如下指令即可,便是重置HEAD跟线上某个分支保持一致,由于git reset的作用便是修正HEAD的方位。

git reset --hard origin master

git恢复版本的两种方法reset/revert

git revert

git revert是用于”反做”某一个版别,以到达撤销该版别的修正的目的。比方,咱们commit了三个版别(版别一、版别二、 版别三),忽然发现版别二不行(如:有bug),想要撤销版别二,但又不想影响撤销版别三的提交,就可以用 git revert 指令来反做版别二,生成新的版别四,这个版别四里会保留版别三的东西,但撤销了版别二的东西。如下图所示:

git恢复版本的两种方法reset/revert

适用场景:假如咱们想撤销之前的某一版别,可是又想保留该方针版别后边的版别,记录下这整个版别变动流程,就可以用这种方法。

  1. 反做: 运用”git revert -n commitid”指令。如下指令,咱们反做(即撤销)版别号为8b89621的版别。留意:这儿可能会出现抵触,那么需求手动修正抵触的文件,并且要git add 文件名。

  2. 提交: 运用”git commit -m ””,此刻可以用”git log”检查本地的版别信息,可见多生成了一个新的版别

  3. 运用”git push”推上长途库