无法丢弃git中的所有本地文件


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在签入时进行自动转换,这些转换的结果将与提交状态不匹配。检查.git/info/attributes.gitattributestext属性:

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的文件,我理解text=auto是找到它们的好方法。


对于所有未分页的文件,请使用(注意结尾处的句点)。这对我有效(从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中,它显示文件名是小写的foo.bar,但是当我实际检查文件时,它是foo.bar

我在一个Mac上,它有一个不区分大小写的文件系统。

我应该可以通过手动移动文件来修复它

Git中的区分大小写