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

Jil*_*nig 5 css git whitespace github removing-whitespace

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

情况:我在本地进行了所有更改,并将它们分为单独的提交。然后,我尝试了一个缩小器,并用缩小的版本覆盖了我所有的CSS文件。我尝试使所有内容“最小化”,但是它仍然使git diff变得混乱-因为存在太多的空格更改-而且我似乎无法将我的回购返回到可以看到实际更改的地方。

谢谢您的帮助!

Def*_*rag 6

重置和读取(推荐)

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

git diff -w --no-color | git apply --cached --ignore-whitespace && git checkout -- . && git reset && git add -p
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

:r !git diff -w --no-color 这会使用您的差异创建一个新缓冲区

: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
Run Code Online (Sandbox Code Playgroud)

继续前进,最终,您将只剩下要提交的空白更改。

如果您不想使用 VIM:

  • 将 git diff 转储到文件中
  • 使用您喜欢的 IDE/文本编辑器编辑文件
  • 将编辑后的文件输入 git apply。
  • 犯罪
  • 重复直到完成。

它可能不是最快的方法,但它很实用,如果您不喜欢第一种方法,它就可以解决问题。

(来源和类似问题在这里