当我在一个分支上工作,想要完全删除所有未暂存的更改时,我倾向于使用git stash
,然后使用git stash drop
。假设我没有任何暂存的更改,那么这与git reset HEAD
之间是否有功能上的区别?
当我在一个分支上工作,想要完全删除所有未暂存的更改时,我倾向于使用git stash
,然后使用git stash drop
。假设我没有任何暂存的更改,那么这与git reset HEAD
之间是否有功能上的区别?
git stash
命令会删除所有已跟踪的文件,可使用git stash pop
命令只还原最近的存储。如果您认为已经多次使用了git stash,可以使用git stash list
命令进行检查。git stash drop
的问题,在这里Difference between git stash pop and git stash apply有很好的解释。git stash --all
命令。git reset HEAD
是完全不同的操作。如果您在本地计算机上没有执行git commit
并执行了git reset
,则所有已暂存的文件都将再次变为未暂存状态。这意味着如果您执行了git add file.test
并执行了git reset HEAD
,则会取消暂存所有文件,并指向本地计算机中的HEAD提交。因此,在使用此命令之前,请三思而后行。git reflog
命令查看差异,从而了解HEAD在本地和源代码库中的指向位置。man git-stash
将本地的修改保存到一个新的存档中,并运行 git reset --hard 命令来撤销这些修改。
实际上它们是完全相同的,没有任何区别。
git reset HEAD
不会真正移除您未提交的更改。使用git reset --hard HEAD
可以清除未跟踪的文件(但未提交的更改仍然存在)。重点是,reset
的主要重点是更新索引——也就是说,您可以使用它来取消暂存更改。git checkout -- .
git clean -f
git clean -n
命令,以确保没有遗漏文件;因为一旦你删除了未被追踪的文件,git
就无法帮助你恢复它)。stash
是一个hack - 它并不反映命令的预期语义 - 但通常会起作用。你甚至可以给--keep-index
命令来避免意外丢弃已暂存的更改。gc
清除掉,所以实际上我不会指望它会引起真正的问题。
git reset --hard HEAD
。鉴于另一个假设——假设我没有暂存更改部分——那么这些操作是相同的,尽管git stash && git stash drop
会导致计算机内部发生更多的工作。 - torek