理解git reset方法和各种参数的用法

1. git reset 语法

命令格式:git reset [--soft | --mixed | --hard] []

1.1 使用参数--hard,如git reset --hard

①替换引用的指向。引用指向新的提交ID。

②替换暂存区。替换后,暂存区的内容和引用指向的目录树一致。

③替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同。

1.2 使用参数--soft,如 git reset --soft

即只更改引用的指向,不改变暂存区和工作区。

只改变commit(指针指向),stage index 和 working directory 不变

1.3 使用参数--mixed或者不使用参数(默认为--mixed),如 git reset

更改引用的指向及重置暂存区,但是不改变工作区。

只改变commit(指针指向) 和 add (stage index),working directory不变

eg.

git status # 查看工作区是否干净

subl readme.md # 修改md文件

git add readme.md # 提交到缓存区 stage index

git commit -m '201907071410' # 提交到版本库

git reset --mix head # 将 stage index 和指针退回到上一次提交

git status # 检查工作区状态

git checkout --README.md # 将缓存区文件拉回到工作区

已经push到远程仓库的代码

通过 git reset

直接删除指定的commit id后面所有的提交,指针指向commit id

git push origin HEAD --force

强制提交代码,因为本地版本早于远程仓库代码

2. git reset 原理

--hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及
repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和
工作区。

--soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

--mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

你可能感兴趣的:(理解git reset方法和各种参数的用法)