繁体   English   中英

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

[英]How can i remove 'Changes not staged for commit'? in 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

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

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

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

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

我只想添加@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 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM