git reset --hard xxx /git reset --soft xxx/[git revert xxx 这三个命令有什么区别?
git操作的三个区域。
-
Working copy代表正在工作的那个区域
-
Index暂存区域,也叫staging area,也就是add过的文件
-
仓库区域,commit过的文件
Head指当前分支顶端,即最近的一个commit。
如果commit的集合是-A-B-C(head master),执行git reset B结果为-A-B(head master)-C。Git reset命令可以把当前的branch重置到另一个commit上。
三个命令都有返回重置的意思,但有区别
-
Git reset --soft xxx head会被重置,但是index区域和working copy都不会变化,
-
Git reset--hard xxx head会被重置,同时index和working copy也会变化以匹配新的head。这意味着数据会改动。
-
Git revert xxx将一次commit反向改回去并提交,版本会递增,不会影响之前的内容。
如下图,创建一个文件monday.txt并更改两次,得到3个commits。分别为version 1.0--version2.0--version3.0(head)

执行命令git reset --soft xxx返回到version2.0,并打开文件monday.txt,可以看到文件内容并没有改变,还是version3.0的内容


回到version3.0后执行git reset --hard xxx返回到version2.0并打开,内容变成的version2.0的内容

执行Git revert xxx撤销刚才的操作并更改内容重新提交


网友评论