git reset 参数详解

git reset

首先,让我们来解释几个定义.

  • HEAD 指向当前branch最顶端的一个commit,该分支上一次commit后的节点

  • Index The index, 也可以被认为是staging area(暂存区), 是一堆将在下一次commit中提交的文件,提交之后它就是 HEAD的父节点. 一般指git add添加的文件。

  • Working Copy(工作副本)当前工作目录下的文件,一般指,有修改,没有 git add,没有 git commit的文件

改变流程如下

当第一次checkout一个新的分支,HEAD指向该分支上最近一次commit。它和index和working copy是一样的。

当修改了一个文件,working copy不再和index和HEAD相同了,所以当文件有改动,它会标记这些文件。

执行 git add命令,这条命令会将上面修改的文件缓存在index中,working copy和index相同了,而他们俩和HEAD不同了。

执行 git commit,Git创建了一个新的commit,HEAD这时指向这个新的commit,此时,HEAD & index & working copy又相同了,

命令

soft

git reset --soft commit-id 改变HEAD,指向那个你要reset到的commit上。而working copy和index不被改变。 即回退到某个版本,只回退了commit的信息,index和working copy中的文件都不改变。如果还要提交,直接commit即可。

mixed

git reset --mixed 相当于git reset此为默认方式, 改变HEAD和index,指向那个你要reset到的commit上。working copy文件不被改变。 即:它回退到某个版本,只保留源码,回退commit和index信息
例:

  • git reset HEAD filepathname放弃缓存区中某个文件的更改 working copy的修改并不会消失,而是取消暂存(index)。
  • git reset HEAD .放弃所有的缓存区的更改 working copy的修改并不会消失,而是取消暂存(index)。

hard

git reset --hard HEAD & index & working copy同时改变到你要reset到的那个commit上。 即 :彻底回退到某个版本,本地的源码也会变为上一个版本的内容
例:

  • git reset --hard HEAD^ 回退到上一次commit的状态。working copy的修改丢失
  • git reset --hard commit-id 可以用来回退到任意版本。working copy的修改丢失

猜你喜欢

转载自blog.csdn.net/rd_w_csdn/article/details/114871872