我的工作目录中有2个文件。我想完全丢弃这些文件,以便我可以切换分支。
网上有很多有用的指南,我已经尝试了每个可以找到的答案来删除这些文件,但它们仍然存在。
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问题尝试过的命令。
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
令人惊讶的是,在每个命令之后,我发现文件仍然存在!
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个文件,我知道我可以一个一个地重新检查它们。然而,如果这种情况再次发生并且我有100个文件,我想知道在一次扫描中将所有这些文件吹走的程序。
git checkout src/test/foo.c
git checkout src/test/bar.c
更新
显然甚至没有git结帐工作
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
这些文件不会消失。
UPDATE2
我也尝试过这些命令而没有运气。
git reflog
git checkout HEAD@{17}
git init
git reset --hard HEAD^
UPDATE3
Stashing什么都不做。
git checkout master
git stash
git stash pop
git stash drop
删除文件也不起作用。
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
答案 0 :(得分:1)
对于所有未暂存的文件,请使用(注意结尾处的句点)。这对我有用(从git v 1.8.4.5开始)
git checkout -- .
或者你可以将所有东西都藏在藏匿处;
git stash
这样你仍然可以回到原来的样子,或者你甚至可以在另一个分支上应用这些变化:
git stash pop (this command applies the latest stash)
或者如果您不再需要更改:
git stash drop
答案 1 :(得分:1)
这听起来很像线路结束的麻烦,你告诉git在签到时进行自动转换,这些转换的结果将与提交的状态不匹配。查看.git/info/attributes
和.gitattributes
了解text
属性:
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
是找到它们的好方法。
答案 2 :(得分:0)
想出来。
在git diff中,它显示文件名是小写foo.bar
,但是当我实际检查文件时它是Foo.bar
。
我在mac上有一个不区分大小写的文件系统。
我应该可以通过手动移动文件来修复它