Git如何取消暂存仅包含空格更改的行?

10

我有一个源代码文件,不知何故它出现了混合缩进(使用了空格和制表符进行缩进)。

我做了很多修改,现在我想在git中提交这些更改。不幸的是,我无意中命令我的编辑器修复了所有缩进。所以现在看起来像我修改了很多行,但实际上唯一的变化是空格。

我的提交必须由我在 Gerrit 的同事审核,因此大量仅包含空格更改的行显示为更改会添加许多噪音。

如何取消暂存文件中所有仅包含空格(或缩进)更改的行,以便我的git提交仅包含实际更改的行?

(或者,如何仅暂存文件的更改超过空格的行?)


2
我想到 Gerrit 应该能够显示忽略空格的差异(如 diff -w)。如果没有,也许你应该向他们建议这个功能。 - John Zwinck
@JohnZwinck:当然,但是不考虑Gerrit,了解如何不提交仅更改空格的行仍然很有用。 - Bjarke Freund-Hansen
1个回答

10
 git diff -w --no-color [file names] | git apply --cached --ignore-whitespace

基本上,它应用了将被添加但不包括空格更改的补丁。您会注意到,之后仍然会有未暂存的更改,这是剩下的空格,请运行以下命令以检出它们:git checkout .


我开发了一个脚本,用于在将一个分支rebase到另一个分支时,将此解决方案应用于该分支的提交。 - atfornes
这个答案对我大部分有效。我的38个文件中有4个出现了“补丁不适用”的警告。最终我将我的更改存储(git stash save),重新应用它们(git stash apply),撤销了那四个失败的文件,按照这个答案的步骤进行操作,从存储中检出那四个文件git checkout stash@{0} -- file1 file2 file3 file4,然后手动修复这四个文件的空格问题。仍然比手动修复所有38个文件要好得多。 - M. Justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接