来自 git reset --hard HEAD leaves untracked files behind :
When I run
git reset --hard HEAD
, it's supposed to reset to a pristine version of what you pulled, as I understand it. Unfortunately, it leaves files lying around, as agit status
shows a big list of untracked files.How do you tell git "Just bring it back to EXACTLY what was in the last pull, nothing more, nothing less"?
要删除这些文件,我必须运行 git clean -df
。
有人可以解释为什么它以这种方式工作以及哪些文件将变得无法跟踪吗?
最佳答案
根据评论中的注释更新。
最后一个问题在先:
which files will become untracked?
没有。但是已经未跟踪的文件应该保持未跟踪状态并且不会受到影响。这与大多数 git 命令的行为一致(除了那些明确影响未跟踪文件的命令)。
不过,我说应该保持未跟踪状态,因为有一种情况甚至不是这样:如果您要重置的提交在与当前未跟踪文件相同的路径下有一个文件,然后工作树版本被不可逆转地破坏。这是非常不符合 git 的行为,IMO 是一个错误,但它确实存在。
Can somebody please explain why it works this way[?]
因为如果 git 隐式删除或修改未跟踪的文件,您将无法恢复该文件在 git 搞砸之前的样子。如果您希望该文件在 git 的控制下,git 会假定您已经添加并可能提交了它。因为你没有(文件未被跟踪),git 通常不会弄乱它,除非你清楚地告诉它应该这样做。
那么回到最初问题的前提:
When I run git reset --hard HEAD, it's supposed to reset to a pristine version of what you pulled, as I understand it
没有。文档清楚地表明只有跟踪状态被还原。
关于git - 为什么 `git reset --hard HEAD~X` 会留下未跟踪的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46300977/