当前位置:   article > 正文

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

git reset --mixed

1 git reset --soft

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

HEAD  
C3 
C1 
C2 

当我们执行下面语句时:

git reset --soft HEAD~1
  • 1

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

HEAD  
C2 
C1 

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

2 git reset --mixed

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

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

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

3 git reset --hard

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

git reset --hard HEAD~1
  • 1

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

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

4 撤销

4.1 撤销远程仓库中的commit

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

git reflog              #得到待撤销commit的hash值
git revert <hash-id>    #撤销
git push                #推送到远程
  • 1
  • 2
  • 3

4.2 git reset --hard的撤销

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

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

5 总结

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/554674
推荐阅读
相关标签
  

闽ICP备14008679号