[英]git checkout — <files> doesn't discard changes?
我的工作目录中有我正在尝试丢弃的更改(重置为当前索引版本的文件),但是, 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 -- .
。 --
只是git checkout命令中使用的符号,用于区分树状/提交点和文件/路径。
操作系统:OSX 10.6 Git:1.7.10.2
造成这种情况的原因是多个文件具有相同的名称但不同的情况。 在不区分大小写的OSX中,不喜欢具有相同名称但具有不同情况的多个文件。 它将它们视为同一个文件。 为了解决这个问题,我将git mv
(或者只是mv
)运行到一个临时文件名,添加了临时文件,允许git删除旧的/错误命名的版本,然后是第二次提交以命名它们。 这也可以在文件系统上得到纠正,该文件系统允许具有相同名称的不同文件是不同的情况。
你试过了吗
git config --global core.autocrlf false
要么
git config --global core.filemode false
根据您的意见,您必须将存储库配置为区分大小写:
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
真是一团糟。
采用 。 代替 -
git checkout .
出于某种原因,同样的事情发生在我身上,但这不是一个区分大小写的问题。 删除文件,然后更改分支解决了问题。
如果您要放弃所做的所有更改,只需使用即可
git checkout .
我遇到了同样的问题。 我发现这两个有问题的文件有DOS行结束字符。 我这样做是为了解决这个问题。
1-使用不同的克隆来更改结束到UNIX的行 - 2删除出现问题的克隆并重新克隆它。
为了避免下次出现此问题,我决定将文件系统转换为区分大小写。
令我惊喜的是,它在Mac OS(10.13.4)上非常简单。
可以使用不同的文件系统快速创建新的磁盘卷:
我将新卷命名为“Projects”并将Format设置为APFS(区分大小写)。
之后,我将所有项目移至新卷。
在我的案例中有什么帮助:(也改善了vinboxx的答案)
我已经按以下方式配置了.gitattributes
:
* text eol=crlf
(我希望-X renormalize在合并后自动使用正确的格式)
暂时评论该行以及设置git config core.autocrlf false
。 一切都恢复正常。
我用git checkout - 。
还有git checkout。
==与op相同的是,它们都适用于Mac OSX 10.7和Linux,同时适用于两者
用git版本1.7.7.5(Apple Git-26)和git 1.7.1编译
尝试不同的回购,看看你是否得到相同的结果。 也许是git版本中的命令错误?
使用“rm -r file”从文件系统中删除文件时,不要将其从存储库中删除。 使用“git rm”,你需要在git中使用相同的功能
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.