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

这三条命令都是撤销命令

背景知识

  • HEAD

这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交

  • Index

index也被称为staging area,是指一整套即将被下一个提交的文件集合。他也是将成为HEAD的父亲的那个commit

  • Working Copy

working copy代表你正在工作的那个文件集

使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。

1.git reset --soft xxx

  • 移动HEAD所指向的分支,使分支指向该提交,而不改变索引和工作目录,即此时的暂存区、工作目录与使用该命令前一致。如下:
    git reset --soft <commit>

  • 刚开始有三个commit,对应三个消息,然后我们创建一个READ.md文件添加上去,在添加消息"add READ".


    1
  • git log命令显示当前分支的历史commit

    2

  • 显示工作区与HEAD指向的commit之间的差异'git diff HEAD'

  • 然后我们使用git reset --soft 02797b命令,到消息为add d这个版本,然后在使用git diff HEAD查看,发现HEAD指向的02797b这个commit跟我们的现在工作区的差异,我们的工作区比HEAD指向的版本多了一个READ.md文件
3
  • 所以--soft参数告诉Git重置HEAD到另外一个commit,但也到此为止。如果你指定--soft参数,Git将停止在那里而什么也不会根本变化。这意味着index,working copy都不会做任何变化,所有的在original HEAD和你重置到的那个commit之间的所有变更集都放在stage(index)区域中。


    图片.png

2.git reset --hard xxx

移动HEAD所指向的分支,使分支指向commit,并用commit快照的内容更新暂存区、工作目录。--hard标记是reset命令唯一危险的用法,它会强制覆盖工作目录、暂存区中的修改。这也是Git会真正销毁数据的仅有几个操作之一。如下:
git reset --hard <commit>

  • git log命令显示当前分支的历史commit

    2

  • git reset --hard 02797命令回到02797commit,用git diff HEAD查看,发现HEAD指向的02797b这个commit跟我们的现在工作区没有差别。

    3

  • 所以--hard参数将重置HEAD返回到另外一个commit,重置index以便反映HEAD的变化,并且重置working copy也使得其完全匹配起来。这是一个比较危险的动作,具有破坏性,数据因此可能会丢失!


    4

3.git revert

  • git revert 的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本。
  • 我使用git revert -n版本号反做

    5

  • 这里可能会发生冲突,所以我touch READ.md,然后git add .,然后git commit -m "revert"

6
  • 最后的效果


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

推荐阅读更多精彩内容

  • 三种命令都是回退到上一个版本.为了试验 我新建了一个文件夹 名为 learngit 的版本库 ,我编写了一个名为...
    缺月楼阅读 853评论 0 1
  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 4,545评论 1 7
  • 今晚的月光应该是我在昭通这几年看过最亮,最美的一次。以前只有在家乡才能欣赏到这么美,这么柔情似水的月光。 月亮像个...
    寒江卷雪阅读 316评论 0 5
  • 李稻葵先生,是清华大学教授,长江学院特聘教授,中国与世界经济研究中心主任,曾任货币政策委员会委员。 他讲了3个故事...
    林子_lam阅读 1,142评论 1 1
  • 秋天的正确打开方式
    黛红阅读 290评论 0 0