git checkout - <files>不会丢弃更改?</files>

时间:2012-07-12 19:10:32

标签: macos git git-checkout

我正在尝试丢弃我的工作目录中的更改(重置为文件的当前索引版本),但是,git checkout -- <file>不会丢弃更改。 我尝试手动删除文件(rm -r files),然后运行git checkout -- .,再次显示修改后的文件。

$ git checkout -- .
$ git status
# On branch master
# 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:   files/Hulk.png
#   modified:   files/Hulk_2.png
#
no changes added to commit (use "git add" and/or "git commit -a")

正在运行git diff表示文件已修改...

diff --git a/files/Hulk.png b/files/Hulk.png
index 1c256cb..1d37fe0 100644
Binary files a/files/Hulk.png and b/files/Hulk.png differ
diff --git a/files/Hulk_2.png b/files/Hulk_2.png
index 1c256cb..0717199 100644
Binary files a/files/Hulk_2.png and b/files/Hulk_2.png differ

注意:有些人说要运行git checkout .,但这会产生与git checkout -- .相同的结果。 --只是git checkout命令中使用的符号,用于区分树状/提交点和文件/路径。

操作系统:OSX 10.6 Git:1.7.10.2

11 个答案:

答案 0 :(得分:22)

造成这种情况的原因是多个文件具有相同的名称但不同的情况。在不区分大小写的OSX中,不喜欢具有相同名称但具有不同情况的多个文件。它将它们视为同一个文件。 为了解决这个问题,我将git mv(或只是mv)运行到一个临时文件名,添加了临时文件,允许git删除旧的/错误命名的版本,然后第二次提交将它们命名为。 这也可以在允许具有相同名称的不同文件的文件系统上进行更正。

答案 1 :(得分:8)

你试过吗

git config --global core.autocrlf false

git config --global core.filemode false

答案 2 :(得分:5)

根据您的评论,您必须将您的存储库配置为区分大小写:

git config core.ignorecase false

这允许git跟踪这两个文件(尽管文件系统只显示一个,这非常令人困惑)。以下是复制步骤,用于演示当git正确跟踪区分大小写时发生的情况:

git init /tmp/test && cd /tmp/test
git config core.ignorecase false
echo test>test && git add test && git commit -m "lowercase t"
mv test Test

现在git status显示与test无差异:

git status -s
 ?? Test

提交Test并使用git ls-files查看我们正在跟踪的内容:

git add Test && git commit -m "uppercase T"
git ls-files
 Test
 test

ls报告什么?为什么,只是'测试',自然:

ls
 Test

最后,当我们修改Test时会发生什么?

echo garbage>Test
git status -s
 M Test
 M test

多么糟糕。

答案 3 :(得分:2)

使用。而不是 -

git checkout .

答案 4 :(得分:1)

出于某种原因,同样的事情发生在我身上,但这不是一个区分大小写的问题。删除文件,然后更改分支解决了问题。

答案 5 :(得分:0)

如果您要放弃所做的所有更改,请使用

git checkout .

答案 6 :(得分:0)

我遇到了同样的问题。我发现这两个有问题的文件有DOS行结束字符。我这样做是为了解决问题。

1-使用不同的克隆将行结束更改为UNIX 2-吹掉问题出现的克隆并重新克隆它。

答案 7 :(得分:0)

为了避免下次出现此问题,我决定将文件系统转换为区分大小写。

令我惊喜的是,它在Mac OS(10.13.4)上非常简单。

可以使用不同的文件系统快速创建新的磁盘卷:

  • 运行“磁盘工具”
  • 点击容器
  • 点击Volume(+)

我将新卷命名为#34; Projects&#34;并将Format设置为APFS(区分大小写)。

之后我将所有项目都移到了新卷。

答案 8 :(得分:0)

在我的案例中有什么帮助:(也改善了vinboxx的答案)

我已按以下方式配置.gitattributes

* text eol=crlf

(我希望-X重新规范化以在合并后自动使用正确的格式)

暂时评论该行并设置git config core.autocrlf false。一切都恢复正常。

答案 9 :(得分:-1)

我用git checkout - 。

也是git checkout。

==和op说的一样 两者都适用于Mac OSX 10.7和Linux,同时适用于

使用git版本1.7.7.5(Apple Git-26) 和 git 1.7.1编译

尝试不同的回购,看看你是否得到了相同的结果。 也许是git版本中的命令错误?

答案 10 :(得分:-2)

使用“rm -r file”从文件系统中删除文件时,不要将其从存储库中删除。你需要在git中用“git rm”来做同样的事情