Unable to discard all local files in git
我的工作目录中有两个文件。我想完全丢弃这些文件,以便切换分支。
网上有很多有用的指南,我已经尝试了所有我能找到的答案来删除这些文件,但是它们仍然存在。
1 2 3 4 5 6 7 | user@machine:~/Code/foo$ git status Changes not staged for commit: (use"git add <file>..." to update what will be committed) (use"git checkout -- <file>..." to discard changes in working directory) modified: src/test/foo.c modified: src/test/bar.c |
我根据其他stackoverflow问题尝试的命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | git reset git reset --hard HEAD^ git stash save --keep-index git stash drop git checkout HEAD -- $(git ls-files -m) git clean -f git clean -dfx git checkout -- . git checkout -- * git checkout 123456 git reset --hard 123456 git reset HEAD --hard |
号
令人惊讶的是,每次命令之后,我都发现文件仍然存在!
1 2 3 4 5 6 7 | user@machine:~/Code/foo$ git status Changes not staged for commit: (use"git add <file>..." to update what will be committed) (use"git checkout -- <file>..." to discard changes in working directory) modified: src/test/foo.c modified: src/test/bar.c |
因为只有两个文件,我知道我可以一个接一个地重新检查它们。然而,如果这再次发生,我有100个文件,我想知道一次扫描就把它们全部吹走的过程。
1 2 | git checkout src/test/foo.c git checkout src/test/bar.c |
。
更新
甚至连一个Git结账都不行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | git checkout src/test/foo.c echo $? 0 git checkout src/test/bar.c echo $? 0 user@machine:~/Code/foo$ git status Changes not staged for commit: (use"git add <file>..." to update what will be committed) (use"git checkout -- <file>..." to discard changes in working directory) modified: src/test/foo.c modified: src/test/bar.c |
这些文件不会消失。
更新2
我也试过这个命令,但运气不好。
1 2 3 4 5 | git reflog git checkout HEAD@{17} git init git reset --hard HEAD^ |
。
更新3
藏匿无济于事。
1 2 3 4 | git checkout master git stash git stash pop git stash drop |
。
删除文件也不起作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | user@machine:~/Code/foo$ git rm --cached $(git ls-files -m) rm 'src/test/foo.c' rm 'src/test/bar.c' user@machine:~/Code/foo$ git status On branch master Your branch is behind 'origin/master' by 162 commits, and can be fast-forwarded. (use"git pull" to update your local branch) Changes to be committed: (use"git reset HEAD <file>..." to unstage) deleted: src/test/foo.c deleted: src/test/bar.c |
这听起来很像行尾问题,您告诉Git在签入时进行自动转换,这些转换的结果将与提交状态不匹配。检查
text
This attribute enables and controls end-of-line normalization. When a text file is normalized, its line endings are converted to LF in the repository.
号
如果有人签入了包含CRLF的文件,我理解
对于所有未分页的文件,请使用(注意结尾处的句点)。这对我有效(从Git v 1.8.4.5开始)
1 | git checkout -- . |
或者你可以把所有东西都藏起来;
1 | git stash |
号
这样,您仍然可以回到原来的样子,或者甚至可以在另一个分支上应用这些更改:
1 | git stash pop (this command applies the latest stash) |
或者,如果您不再需要这些更改:
1 | git stash drop |
。
明白了。
在git diff中,它显示文件名是小写的
我在一个Mac上,它有一个不区分大小写的文件系统。
我应该可以通过手动移动文件来修复它
Git中的区分大小写