如何删除“未提交的更改”?在git

时间:2013-01-03 23:58:05

标签: git

当我做'git status'时,我得到了

% git status
# Not currently on any 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:   Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
#       modified:   Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops

但是在我做了'%git checkout - Source / WebKit / win / WebKit.vcproj / WebKitApple.vsprops'后,我看到了同样的结果:

% git checkout -- Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
% git status
# Not currently on any 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:   Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
#       modified:   Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
#

如何删除那些“未提交提交的更改”?

我甚至尝试过'git stash',还有一些是如何改变的。

我做了'git diff'。这是结果,我没看到^ M: 我看过'.gitconfig',我没有'autoctrl

% git diff       
diff --git a/Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops b/Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
index 2ea7a51..9643739 100644
--- a/Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
+++ b/Source/WebKit/win/WebKit.vcproj/WebKitApple.vsprops
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="WebKitApple"
- >
- <Tool
-         Name="VCLinkerTool"
-         AdditionalDependencies="CFNetwork$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib QTMovieWin$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib"
-         DelayLoadDLLs="QTMovieWin$(WebKitConfigSuffix).dll"
- />
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+       ProjectType="Visual C++"
+       Version="8.00"
+       Name="WebKitApple"
+       >
+       <Tool
+               Name="VCLinkerTool"
+               AdditionalDependencies="CFNetwork$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib QTMovieWin$(WebKitConfigSuffix).lib WebKitSystemInterface$(WebKitConfigSuffix).lib"
+               DelayLoadDLLs="QTMovieWin$(WebKitConfigSuffix).dll"
+       />
 </VisualStudioPropertySheet>
\ No newline at end of file
diff --git a/Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops b/Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
index 797b4cb..c95c87d 100644
--- a/Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
+++ b/Source/WebKit/win/WebKit.vcproj/WebKitDirectX.vsprops
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="WebKitDirectX"
- >
-  <Tool
-         Name="VCCLCompilerTool"
-         AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)\Include&quot;"
- />
-  <Tool
-         Name="VCLinkerTool"
-         AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
- />
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+       ProjectType="Visual C++"
+       Version="8.00"
+       Name="WebKitDirectX"
+       >
+  <Tool
+               Name="VCCLCompilerTool"
+               AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)\Include&quot;"
+       />
+  <Tool
+               Name="VCLinkerTool"
+               AdditionalLibraryDirectories="$(DXSDK_DIR)\Lib\x86"
+       />
 </VisualStudioPropertySheet>
\ No newline at end of file

2 个答案:

答案 0 :(得分:9)

听起来您正在使用core.autocrlf选项。可能发生的事情是存储库中的文件具有CRLF行结尾,但由于设置了此选项,Git认为该文件应该在存储库中具有LF行结尾。当您签出文件时,您将获得具有平台本机行结尾的工作目录中的文件(如果在Windows上为CRLF,在Unix上为LF等)。

作为git status操作的一部分,Git将这些转换回LF。如果HEAD修订版中的文件存储在Git中,因为它具有CRLF结尾,这就可以解释为什么即使在您从索引中检出修订版之后,Git仍然认为这两个版本是不同的。

检测此问题最直接的方法是从终端运行git diff,这会将CR字符显示为^M

要解决这种情况,您只需提交文件(使用“标准化行结束”等消息),或者可以完全禁用core.autocrlf,这意味着文件将存储在存储库中-is 并且Git不会执行行结束调整。 (如果您与不使用相同平台的其他人一起开发,这可能会产生非常不利的后果。)

答案 1 :(得分:2)

我只想添加 @cdhowie 的答案。

我遇到了与OP相同的问题。

验证Windows行结尾的最佳方法不是通过vim,而是通过od

od -xcb foo.txt | tail

Windows行结尾应如下所示:

\r \n

要轻松获取所有受影响的文件并转换为unix(在我的情况下),请执行以下操作:

git ls-files -m | xargs dos2unix
dos2unix: converting file foo.txt to Unix format ...
dos2unix: converting file moo.txt to Unix format ...