为什么`git reset --hard HEAD~X`会留下未跟踪的文件?

Mic*_*l H 2 git git-reset

git reset --hard HEAD留下未跟踪的文件:

当我跑步时git reset --hard HEAD,它应该重置为你所拉的原始版本,据我所知.不幸的是,它留下了文件,git status显示了一个未跟踪文件的大列表.

你怎么告诉git"只是把它带回到最后一次拉动中,没有更多,没有更少"?

要摆脱这些文件,我必须运行git clean -df.

有人可以解释为什么它以这种方式工作,哪些文件将成为未跟踪的?

Mar*_*ger 6

在评论中更新了每个笔记.

最后一个问题:

哪些文件将被取消跟踪?

没有.但是,这是文件已经未经跟踪应保持未跟踪并不会受到影响.这与大多数git命令的行为一致(除了那些明确影响未跟踪文件的命令).

我说应该保持不受限制,因为有一种情况甚至不是这样:如果你重置的提交文件与当前未跟踪文件的路径相同,那么工作树版本将被不可逆转地破坏.这是非常不合理的行为,IMO是一个错误,但它确实存在.

有人可以解释为什么它这样工作[?]

因为如果git隐式删除或修改未跟踪的文件,你就无法在git搞乱之前恢复那个文件的样子.如果你想让git控制下的文件,git假设你已经添加并且可能已经提交了它.既然你没有(文件没有跟踪),git通常不会弄乱它,除非你清楚地告诉它应该.

所以回到原始问题的前提:

当我运行git reset --hard HEAD时,它应该重置为你所提取的原始版本,据我所知

不.文档很清楚,只有被跟踪的状态才会被恢复.