git reset --soft 和 git reset 之间的区别

Different between git reset --soft and git reset

有什么区别

git reset --soft origin/dev

git reset origin/dev

希望这不是很大的区别,因为我可能只是不小心搞砸了。

在形式 git reset --soft <commit> 中,git 只会更新它所在的 "commit",而不会触及索引或工作树.

当您的索引或工作树的状态准确但它基于错误的提交时(或者您想要删除提交,因此您将 --soft 重置为之前的提交),这偶尔会很方便。例如:

清除历史:

git reset --soft <first-commit-in-log>
git commit --amend 

这将产生 git 替换第一个提交并丢弃所有后续提交的效果,但仍然具有完全相同的文件。


在形式 git reset origin/dev中,git将获取任何origin/dev的内容(树或指向树的提交), 并用它的内容更新索引。这仍然不会影响工作树,但索引中的文件将显示为准备提交(origin/dev 中的文件)。

This is useful for yanking a file out of history

git reset <commit> path/to/file
git checkout path/to/file

第一个命令从 <commit> 的历史中挖掘 path/to/file 的版本并将其放入索引中。第二个命令获取索引的新内容并覆盖该文件的工作树中的任何内容。


git reset是一个超级强大的命令,有很多可能性。建议您克隆一个存储库并使用它。