Git 添加补丁...但忽略空格更改
Git add -patch... but ignore whitespace changes
我似乎找不到使用 git add -p
的好方法,但告诉 git 忽略所有空格更改。我不想重置我的本地更改。
情况:我在本地进行了所有更改,并将它们分组到单独的提交中。然后我尝试了一个压缩器,并用压缩后的版本覆盖了我所有的 css 文件。我尝试了 "un-minifying" 一切,但它仍然搞砸了 git 差异 - 因为有太多空白更改 - 而且我似乎无法将我的回购协议回到我可以看到实际的地方变化。
感谢您的帮助!
重置和读取(推荐)
这是最简单的方法。
如果您不想在您的工作目录中重置和读取,则没有 one-line-straight-forward 方法。你应该这样做,这是一个很好的方法,一步一步解释:
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 忽略空白,并对其进行索引
git checkout -- .
删除未索引的“空白”更改
git reset
将索引重置为仅非空白更改
git add -p
在补丁模式中添加非空白更改
不重置
这部分解决了您的问题,没有隐藏或重置。
您可以 "diff and apply" 仅更改非空白,方式如下:
git diff -w --no-color | git apply --cached --ignore-whitespace
这是另一种方式,但请注意,这里的补丁有点乱,你需要缓冲并手动更改差异删除空格。
如果您使用 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
继续前进,最终您将只剩下要提交的空白更改。
如果不想用VIM:
- 将 git diff 转储到文件中
- 使用您最喜欢的 IDE/text 编辑器编辑文件
- 将编辑后的文件输入 git 应用。
- 提交
- 重复直到完成。
这可能不是最快的方法,但它很实用,如果您不喜欢第一种方法,也可以解决问题。
(来源和类似问题 here)
我似乎找不到使用 git add -p
的好方法,但告诉 git 忽略所有空格更改。我不想重置我的本地更改。
情况:我在本地进行了所有更改,并将它们分组到单独的提交中。然后我尝试了一个压缩器,并用压缩后的版本覆盖了我所有的 css 文件。我尝试了 "un-minifying" 一切,但它仍然搞砸了 git 差异 - 因为有太多空白更改 - 而且我似乎无法将我的回购协议回到我可以看到实际的地方变化。
感谢您的帮助!
重置和读取(推荐)
这是最简单的方法。 如果您不想在您的工作目录中重置和读取,则没有 one-line-straight-forward 方法。你应该这样做,这是一个很好的方法,一步一步解释:
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 忽略空白,并对其进行索引
git checkout -- .
删除未索引的“空白”更改
git reset
将索引重置为仅非空白更改
git add -p
在补丁模式中添加非空白更改
不重置
这部分解决了您的问题,没有隐藏或重置。 您可以 "diff and apply" 仅更改非空白,方式如下:
git diff -w --no-color | git apply --cached --ignore-whitespace
这是另一种方式,但请注意,这里的补丁有点乱,你需要缓冲并手动更改差异删除空格。 如果您使用 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
继续前进,最终您将只剩下要提交的空白更改。
如果不想用VIM:
- 将 git diff 转储到文件中
- 使用您最喜欢的 IDE/text 编辑器编辑文件
- 将编辑后的文件输入 git 应用。
- 提交
- 重复直到完成。
这可能不是最快的方法,但它很实用,如果您不喜欢第一种方法,也可以解决问题。
(来源和类似问题 here)