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

时间:2014-04-14 15:37:04

标签: git

我的工作目录中有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

3 个答案:

答案 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上有一个不区分大小写的文件系统。

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

Case sensitivity in Git