你怎么结合git add patch
我怎么能做补丁模式的git添加,但忽略空白的变化。
该用例用于重新格式化文件并对其进行更改。 我想先提交真正的代码更改(如git diff -w path所示),然后将重新格式化为单独提交。
我建议简单地往返差异
理念:
git diff --ignore-all-space | (git reset --hard && git apply)
警告 :由于git reset
在那里(这不会保留对写入的二进制文件的更改),所以这是充满危险的。 也许你会想要一个类似于bash的函数
function cleanup_patch()
{
if [ $# -lt 1 ]; then
echo 'Must provide explicit paths (wildcards allowed)';
else
git diff --ignore-all-space -- "$@" |
(git checkout HEAD -- "$@" &&
git apply)
fi
}
Afaict看起来很有用的--binary
选项来比较不符合空白忽略标志
这是对相关问题的改编。
git diff -w --no-color | git apply --cached --ignore-whitespace
它的好处是您不需要使用stash
,临时文件或reset --hard
工作文件夹。
附录
除了只有空白的编辑外,上面的解决方案只能进行更改。 这并没有解决补丁问题,尽管在这种情况下使用 - 补丁--patch
并不是直截了当的。
补丁选项1:在文本编辑器中编辑差异
有很多方法可以使用文本编辑器来实现。 Vim特别适合这一点。
在存储库的根目录中,启动Vim。
在正常模式下,将diff加载到空缓冲区中...
:r !git diff -w --no-color
:set ft=diff # if you want syntax highlighting
编辑差异并删除不想放置的部分。
分阶段vim缓冲区的内容,运行vim ex命令...
:w !git apply --cached --ignore-whitespace
如果你是Vim afficionado,你也可以使用视觉模式来演示!
:<',>'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 .
请记住,您正在删除要保留的更改。 重复并根据需要进行提交,直到只剩下空白更改为止。
@“Justin C”的答案更强大和多用途的版本是:
anw = !git diff -U0 -w --no-color -- "$@" | git apply --cached --ignore-whitespace --unidiff-zero "#"
看到这个答案更多。
链接地址: http://www.djcxy.com/p/9827.html