Git add -patch ...但忽略空格更改

时间:2017-06-07 22:57:29

标签: css git github whitespace removing-whitespace

我似乎找不到使用git add -p的好方法,但告诉git忽略所有空格更改。我不想重置我的本地更改。

情况:我在本地进行了所有更改,并将它们分组到单独的提交中。然后我尝试了一个minifyer,用他们的缩小版本覆盖了我所有的css文件。我试过" un-minifying"一切,但它仍然搞砸了git差异 - 因为有太多的空白变化 - 我似乎无法让我的回购回到一个我可以看到实际变化的地方。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

重置和读取(推荐)

这是最简单的方法。 如果您不想在工作目录中重置和读取,则没有单行直接方式。你应该这样做,这是一个循序渐进的好方法:

git diff -w --no-color | git apply --cached --ignore-whitespace && git checkout -- . && git reset && git add -p

git diff -w --no-color创建没有终端格式和颜色的差异

git apply --cached --ignore-whitespace应用diff ignore whitepace,并将其编入索引

git checkout -- .删除未编入索引的“空白”更改

git reset将索引重置为非空白更改

git add -p在补丁模式中添加非空白更改

source here

不重置

这可以部分解决您的问题,无需存储或重置。 您可以通过以下方式“区分并应用”非空格更改:

git diff -w --no-color | git apply --cached --ignore-whitespace

这是另一种方式,但请注意,这里的修补有点混乱,你需要缓冲并手动更改差异删除空格。 如果您使用VIM,可以使用以下快速逐步命令来缓冲,快速查找,删除并最终应用干净的差异:

:r !git diff -w --no-color这会创建一个带有diff

的新缓冲区

:set ft=diff(可选)如果您想要语法高亮显示

,请使用此选项

现在你需要手动删除你不想要的东西,然后

:w !git apply --cached --ignore-whitespace应用当前固定差异

并最终使用:!git commit -m "your fixed commit"

提交此差异

这是第一次迭代。您需要清除缓冲区,读取未分级的更改并重复:

:bd! | set ft=diff | r !git diff -w --no-color

继续前进,最终,你将只留下空白更改来提交。

如果您不想使用VIM:

  • 将git diff转储到文件
  • 使用您喜欢的IDE /文本编辑器编辑文件
  • 将已编辑的文件提供给git apply。
  • 提交
  • 重复直至完成。

它可能不是最快的方式,但如果您不喜欢第一种方法,它可以起到作用。

(来源及类似问题here