这是对related question 的改编。
git diff -w --no-color | git apply --cached --ignore-whitespace
它的好处是您不需要使用stash、临时文件或对您的工作文件夹执行reset --hard。
附录
上述解决方案仅阶段更改,仅空白编辑除外。虽然在这种情况下使用--patch 暂存并不直接,但这并没有解决补丁问题。
补丁选项 1:在文本编辑器中编辑差异
有很多方法可以使用文本编辑器来实现这一点。 Vim 尤其适合这个。
在存储库的根目录中,启动 Vim。
在正常模式下,将差异加载到一个空缓冲区中...
:r !git diff -w --no-color
:set ft=diff # if you want syntax highlighting
编辑差异并删除您不想暂存的部分。
要暂存 vim 缓冲区的内容,请运行 vim ex 命令...
:w !git apply --cached --ignore-whitespace
如果您是 Vim 爱好者,您也可以使用视觉模式进行演示!
:<',>'w !git apply --cached --ignore-whitespace
您可以使用 ex 命令提交分阶段的更改...
:!git commit -m "message"
# or
:!git commit
清除缓冲区,读取未暂存的更改,然后重复
:bd! | set ft=diff | r !git diff -w --no-color
最终,您将只剩下要提交的空白更改。
如果您不使用 Vim,您也可以将 git diff 转储到文件中,编辑文件,保存,然后将文件输入到 git apply。提交并重复直到完成。这有点乏味,但很实用。
补丁选项 2:补丁重置
它从 git add --patch 倒退,但是一旦你使用...进行非空白更改...
git diff -w --no-color | git apply --cached --ignore-whitespace
...您可以使用...在补丁模式下取消暂存块
git reset --patch .
请记住,您正在删除要保留暂存的更改。根据需要重复并提交,直到只剩下空白更改。