Hig*_*ife 21 git macos 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")
Run Code Online (Sandbox Code Playgroud)
运行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
Run Code Online (Sandbox Code Playgroud)
注意:有些人说要运行git checkout .
,但这会达到相同的效果git checkout -- .
.这--
只是git checkout命令中用于区分树状/提交点和文件/路径的符号.
操作系统:OSX 10.6 Git:1.7.10.2
Hig*_*ife 22
造成这种情况的原因是多个文件具有相同的名称但不同的情况.在不区分大小写的OSX中,不喜欢具有相同名称但具有不同情况的多个文件.它将它们视为同一个文件.为了解决这个问题,我运行git mv
(或只是mv
)一个临时文件名,添加了临时文件,允许git删除旧的/错误命名的版本,然后是第二次提交以命名它们.这也可以在文件系统上得到纠正,该文件系统允许具有相同名称的不同文件是不同的情况.
你试过了吗
git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)
要么
git config --global core.filemode false
Run Code Online (Sandbox Code Playgroud)
根据您的意见,您必须将存储库配置为区分大小写:
git config core.ignorecase false
Run Code Online (Sandbox Code Playgroud)
这允许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
Run Code Online (Sandbox Code Playgroud)
现在git status
显示没有区别test
:
git status -s
?? Test
Run Code Online (Sandbox Code Playgroud)
提交Test
并使用git ls-files
以查看我们正在跟踪的内容:
git add Test && git commit -m "uppercase T"
git ls-files
Test
test
Run Code Online (Sandbox Code Playgroud)
什么ls
报道?为什么,只是'测试',自然:
ls
Test
Run Code Online (Sandbox Code Playgroud)
最后,当我们修改Test时会发生什么?
echo garbage>Test
git status -s
M Test
M test
Run Code Online (Sandbox Code Playgroud)
真是一团糟.