GIT回退到某一历史版本

本地回退

方法有三: checkout、reset和revert

checkout

1
git checkout <filename>

回退单个未commit过的文件,使其回退到上次提交的内容,不会修改当前的HEAD指针的位置。

reset

1
git reset --hard <commit>

回退到某次提交。回退后,指定hash值以后的提交都会从提交日志上消失

注意:工作区和暂存区的内容都会被重置到指定提交的时候,如果不加--hard则只移动HEAD的指针,不影响工作区和暂存区的内容。

结合 git reflog 找回提交日志上看不到的版本历史,撤回某次操作前的状态。

1
2
git reflog
git reset <commit>

这个方法可以对你的回退操作进行回退,因为这时候 git log 命令已经找不到历史提交的hash值了。

revert

这个方法是最温和,最受推荐的,因为本质上不是修改过去的版本历史,而是将回退版本历史作为一次新的提交,所以不会改变版本历史,在push到远程仓库的时候也不会影响到团队其他人。

1
git revert <commit>

远程修改

对远程仓库的版本历史修改,都是在本地修改的基础上进行的:本地修改完成后,再push到远程仓库。
但是除了 git revert 可以直接push,其他都会对原有的版本历史修改,只能使用强制push

1
git push -f <remote> <branch>

经典案例

删除错误提交之后的所有commit

1
2
git reset --hard <commit>
git push origin HEAD --force

其中:

根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:

  1. –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
  2. –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
  3. –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
Brick wechat
扫一扫,用手机看更方便(^ ◕ᴥ◕ ^)