2013-01-03 94 views
5

當我做 'git的狀態',我得到我如何刪除'變更未提交'提交'?在混帳

% 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 

但之後我做了 '混帳%結帳 - 源/ 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 
+0

您是否在Visual Studio打開時 你做這個?如果沒有,請關閉VS並再次嘗試checkout/status命令。我想知道VS是否正在讀取,然後重新寫入文件,只要它注意到它已被修改。 – cdhowie

回答

8

這聽起來像你正在使用的core.autocrlf選項。可能發生的情況是,存儲庫中的文件具有CRLF行結尾,但由於設置了此選項,Git認爲該文件應該在存儲庫中具有LF行結尾。當你簽出文件時,你正在使用平臺本地行結束符(如果在Windows上是CRLF,在Unix上是LF等)在工作目錄中獲取文件。

作爲git status操作的一部分,Git將它們轉換回LF。如果HEAD修訂版本中的文件存儲在Git中,並具有CRLF結尾,那麼即使在檢出索引中的修訂版之後,這也可以解釋爲什麼Git仍然認爲這兩個版本不同。

檢測此問題的最簡單方法是從終端運行git diff,該終端將顯示CR字符^M

要解決這種情況,你可以只提交文件(如「規範行尾」的一些消息),或者你可以完全禁用core.autocrlf,這意味着文件將被存儲在庫原樣和線Git不會執行結束調整。 (如果與不使用相同平臺的其他人一起開發,這可能會帶來非常不利的後果。)

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 ... 
+0

'git ls-files -m | xargs dos2unix'非常有用。 –