乐者为王

Do one thing, and do it well.

Git笔记之reset

git reset的作用是重置当前HEAD到指定状态,它有三个选项:--soft、--mixed和--hard。

  • --soft选项既不重置索引内容,也不改变工作目录中的任何内容,它仅仅是重置当前HEAD到指定commit。使用该选项后,git diff的返回信息不变,而git diff --cached和git diff HEAD的返回信息有变化。
  • --mixed是git reset的默认选项,它的作用是重置索引内容,将其定位到指定的commit,但不改变工作目录中的任何内容。使用该选项后,git diff和git diff HEAD的返回信息有变化,而git diff --cached的返回信息不变。
  • --hard选项会重置索引内容,将其定位到指定的commit,并且工作目录中的内容也会完全回退到指定commit时的状态。所以使用该选项后,git diff、git diff --cached和git diff HEAD的返回信息都为空。由于这个选项的杀伤力太大,使用时需要谨慎。

以下是根据三个选项的特性制作的表格:

是否重置索引 是否重置工作目录
--soft N N
--mixed Y N
--hard Y Y

有时候你可能刚刚把一个文件添加到暂存区里,然后就发现这是错误的,接着你可能想从暂存区中删除该文件,这时你可以使用下面这个命令:

1
git reset <file>

它仅从索引中移除文件,但不会触及工作目录。

Comments