问题 使git撤消任何仅限空白的更改?


有没有一种简单的方法可以自动对任何只有空格更改的文件进行git checkout?我正在处理从Eclipse运行的Windows和一些代码生成,所以我得到了新行更改和空白更改,这些更改阻碍了我的工作流程中的噪音,并且难以跟踪实际更改。

即使只是一个很好的方式 报告 哪些文件有真正的变化,哪些文件不是一个开始,而不是必须为每个文件做一个diff -w


1701
2017-12-10 00:01


起源

这已被回答(请注意,虽然问题仅说明行结尾,但答案使用diff -b,即“忽略空白量的变化”): stackoverflow.com/questions/4027584/... - Keilaron
可能重复 如何“git重置”所有文件,其唯一的区别是lineendings - Keilaron
有关: Git只添加非空格更改 - Joshua Goldberg


答案:


如果您的更改没有上演

要暂存不仅仅是空格更改的更改,您可以执行以下操作:

git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero -

之后,要删除所有未分级的更改(仅在空格中有所不同的更改),您可以执行以下操作:

git checkout .

如果您的更改已上演

通过执行操作来取消您的更改 git reset --mixed 并从这个答案的顶部继续。注意 mixed 是默认模式,可以省略。


14
2017-08-03 14:22





这很可能是一个行结束问题; Windows使用CRLF(回车+换行,或 \r\n)行结尾,而大多数其他系统使用LF(换行,或 \n)。幸运的是,Git可以将文件规范化 总是 在repo中存储为LF,但在Windows上将作为CRLF签出。您可以通过设置来完成此操作 core.autocrlf 至 true 在Windows上:

$ git config --global core.autocrlf true

和设置 core.autocrlf 至 input 在Mac和Linux上:

$ git config --global core.autocrlf input

更多信息可用 这里 (向下滚动到标题为的部分 core.autocrlf)。


1
2017-12-10 03:41



我知道 为什么 它正在做它,我知道core.autocrlf并将其设置为true。这些东西都不容易丢弃代码生成所带来的仅空白更改(例如GraniteDS'插件甚至在Windows上吐出unix换行符) - Sophistifunk
在您链接的文章中,甚至没有提到core.autocrlf ... - moonlightcheese
@moonlightcheese:几年前他们改变了Git网页,显然有些重定向错误了。我更新了网址。 - mipadi
@mipadi谢谢! - moonlightcheese