git reset --hard xxx、git reset --soft xxx、git revert xxx的区别与作用

首先我们先来了解一下这3个命令都有什么作用

git reset --hard xxx:
重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

git reset --soft xxx:
重置当前的HEAD为指定commit,但保持暂存区和工作区不变

git revert xxx:
新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支

刚接触可能不太了解HEAD是什么,其实这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交。HEAD 并不是只能指向分支的最顶端(时间节点距今最近的那个),实际上它可以指向任何一个节点。


git工作流程.png

使用git reflog命令来查看所有的版本信息
我们可以看到在是用来git reset --hard 3bc9551命令后,再次查看版本信息发现HEAD指向了3bc9551这个节点。但是要知道,暂存区和工作区同时也被重置了,所以可能造成数据的丢失。


1.png

同样的,在使用git reset --soft 3bc9551命令后,查看版本信息后发现HEAD同样指向了3bc9551这个节点。但是soft命令并没有改变暂存区和工作区,所以用commit进行提交的还是原来的暂存区和工作区的文件。
2.png

而git revert xxx命令则会对某次操作进行撤销,但是这次操作之前或者之后的commit都将被保留,并把这次撤销当做一次新的提交。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,668评论 1 26
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,734评论 4 54
  • git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git b...
    猿万阅读 5,133评论 1 45
  • 妈妈没上过学,是典型的“文盲”,妈妈在9岁时就没了她的妈妈,当时大舅7岁,二舅4岁,老舅2岁,老姨才七个月大,姥爷...
    8afd049bee77阅读 463评论 0 0
  • 温婉美丽的陌生女人,吞噬所有温暖,剩下阴暗潮湿的墙壁。 男子静静的感受着这夜,痴痴的走了会神,清格这小姑娘倒是有几...
    苏向晚阅读 180评论 0 0