git reset命令--soft、--mixed、--hard的区别

文章目录

  • 1 git reset --soft
  • 2 git reset --mixed
  • 3 git reset --hard
  • 4 撤销
    • 4.1 撤销远程仓库中的commit
    • 4.2 git reset --hard的撤销
  • 5 总结

1 git reset --soft

假设我们现在有三个提交C1~C3,现在HEAD指向C3,

HEAD  
C3 
C1 
C2 

当我们执行下面语句时:

git reset --soft HEAD~1

此时HEAD指向C2,当前C3的改变保存在暂存区,可以通过git status查看,如下图所示

HEAD  
C2 
C1 

此时只要再执行git commit,就可以恢复到最初始的样子。

2 git reset --mixed

  • --mixedgit reset的默认选项
git reset --mixed HEAD~1

还是上面的例子,提交前和提交后的图和--soft一模一样。不同的是,执行git status,会显示C3的改变还未add到暂存区。此时执行git commit,不会发生任何事。也就是说--mixed选项将C3的改变重置到了工作区。所以执行以下指令,即可恢复到最初始的样子

git add .
git commit -m "message"
  • 这里讲的是git reset ,那么git reset 起什么作用呢?
    • 从暂存区中移除,它不会将工作区中该文件的内容替换成要从暂存区中移除的文件的内容

3 git reset --hard

--hard选项会更改HEAD指针、暂存区和工作区的内容。如果执行下面语句:

git reset --hard HEAD~1

那么C3的变化、暂存区中还没有提交的变化、工作区中所有的变化都会被移除,而将工作区替换为C2的commit。

  • 也就是说,此时HEAD、暂存区、工作区都有相同版本的文件

4 撤销

4.1 撤销远程仓库中的commit

如果你想撤销一个你已经提交到远程仓库的commit,可以调用git revert来在本地撤销,然后push到远程分支上。

git reflog              #得到待撤销commit的hash值
git revert     #撤销
git push                #推送到远程

4.2 git reset --hard的撤销

如果你已经执行了git reset --hard,将一个commit从分支中去除了,还是可以恢复的,执行下列指令恢复:

git reflog                                 #找到对应commit的hash值
git checkout -b      #恢复
  • 在Git中,reset掉的commit不会立刻被删除,它大概会保存90天。

5 总结

在这里插入图片描述

你可能感兴趣的:(git,git,github)