git checkout不会重置文件

时间:2013-07-14 18:54:47

标签: git

Git-1.8.3-preview20130601.exe安装Git运行Windows 7。

我的工作目录中有一个修改过的文件,我想在最后一次提交时将其恢复到状态。我尝试了git checkout的各种调用,但修改后的文件仍在我的工作目录中。例如:

[C:\Work\BitBucket\proj1] 14:32:45>git status
On branch work2
Your branch is behind 'origin/work2' by 9 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
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:   pomodoro.html
 no changes added to commit (use "git add" and/or "git commit -a")

[C:\Work\BitBucket\proj1] 14:32:53>git checkout pomodoro.html

[C:\Work\BitBucket\proj1] 14:33:00>git status
 On branch work2
 Your branch is behind 'origin/work2' by 9 commits, and can be fast-forwarded.
   (use "git pull" to update your local branch)

 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:   pomodoro.html
 no changes added to commit (use "git add" and/or "git commit -a")

[C:\Work\BitBucket\proj1] 14:33:04>

(我在git checkout -- pomodoro.html得到了相同的结果。)

所以,git认为pomodoro.html被修改了,但是当我使用

git difftool  

我被告知文件是相同的。

不知道它是否相关,但我在我的Git配置中将core.autocrlf设置为true。当我将其更改为false时,我得到了同样的行为。

3 个答案:

答案 0 :(得分:4)

此链接(由AD7Six提供) - help.github.com/articles/dealing-with-line-endings - 似乎就是答案:修复线路结尾。
由于autocrlf已设置为true,因此不确定该文件中的行结尾是如何搞砸的 感谢所有其他评论。

答案 1 :(得分:2)

这是一个疯狂的镜头,但是:

这个文件是出于某种原因在repo中被标记为可执行文件吗?它不太可能是html,但如果它已存储在例如一个胖的格式化驱动器是可以想象的。如果是这种情况并且您的Windows git未配置为忽略权限,则文件将始终更改,因为没有任何重置或签出将为您提供Windows上的可执行位。

将消息集filemode删除为false:https://superuser.com/a/139044/236874

答案 2 :(得分:0)

我遇到类似的问题,在我的案例中是osx,这是由于两个文件具有相同名称但不同的情况:https://sourcedevelop.org/blog/post/fix-git-commands-not-working-some-files

我花了好几个小时试图找出如何修复它,按照这些说明。识别两个具有相同名称的文件的症状的关键是当您对文件执行git checkout时,您会看到下一个git状态中列出的文件,但文件的大小写不同。我最终删除了文件,然后再添加其中一个。

git rm -f <filename>
git rm -f <filename>
git commit -m "Removing duplicate files"
<put the file back, the version you want>
git add . 
git commit -m "adding files back"