首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 ><files>签出-- git不放弃更改?

<files>签出-- git不放弃更改?
EN

Stack Overflow用户
提问于 2012-07-13 03:10:32
回答 11查看 23.4K关注 0票数 24

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

代码语言:javascript
复制
$ 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显示文件已修改...

代码语言:javascript
复制
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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-07-13 05:36:31

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

票数 23
EN

Stack Overflow用户

发布于 2014-04-24 17:27:07

你试过了吗

代码语言:javascript
复制
git config --global core.autocrlf false

代码语言:javascript
复制
git config --global core.filemode false
票数 9
EN

Stack Overflow用户

发布于 2012-07-13 20:43:04

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

代码语言:javascript
复制
git config core.ignorecase false

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

代码语言:javascript
复制
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 statustest没有什么不同

代码语言:javascript
复制
git status -s
 ?? Test

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

代码语言:javascript
复制
git add Test && git commit -m "uppercase T"
git ls-files
 Test
 test

ls会报告什么?为什么,只是“测试”,很自然:

代码语言:javascript
复制
ls
 Test

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

代码语言:javascript
复制
echo garbage>Test
git status -s
 M Test
 M test

啊!怎么这么乱呀。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11458926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档