版本回退
当前有三个commit提交版本
commit1
commit2
commit3
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本
上一个版本是HEAD^,上上一个版本是HEAD^^
当前版本是在commit3
要回退到commit1或2,使用git reset命令
回退到上一版本commit2
git reset --hard HEAD^
如果还想返回到commit3。需要知道commit3的commit id 1094adb...
git reset --hard 1094
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号
git reset三种方式
git reset(--mixed) HEAD~1
回退一个版本,会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,
暂存区就是git add临时提交到的地方。
未暂存的状态就是将这些文件标记位待提交
git reset --soft HEAD~1
回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响)
这些文件还在暂存区中
git reset --hard HEAD~1
回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换
这个hard会将回退到该版本之后提交的内容都删除或替换掉。。也就是回退到该版本后,项目不包含该版本后面修改的任何内容。
比如一个项目test文件夹中
第一次提交test1.txt
第二次提交test2.txt
第三次提交test3.txt
现在项目test文件夹中有三个文件
test1.txt,test2.txt,test3.txt
如果我们使用hard模式回退到第一次提交
git reset --hard HEAD~2
执行后,test文件夹中现在就只有test1.txt文件
如果我们使用mixed模式
git reset --mixed HEAD~2
test文件夹中还有这三个文件夹,
只不过test2.txt和test3.txt文件没有打勾
会将之前提交的版本文件全部恢复到未暂存状态
如果我们使用soft模式
git reset --soft HEAD~2
test文件夹中还有这三个文件夹
只不过test2.txt和test3.txt文件前面是+标记,表示已经git add 到暂存区中