Git add -patch...但忽略空格变化

10

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

情况是这样的:我有所有的更改都保留在本地,并将它们分成单独的提交。 然后我尝试了一个minifyer,并用它们的压缩版本覆盖了所有的css文件。 我试图“取消压缩”一切,但它仍然会弄乱git diff-因为有许多空格变化-而且我似乎不能让我的存储库回到一个可以看到实际更改的地方。

谢谢你的帮助!


2
@MrJLP,那个问题是关于差异的。这个问题是关于git add的。 - Jillian Hoenig
请查看我的答案,链接在这里:https://dev59.com/QGw15IYBdhLWcg3wfr9y#44785950 - Chucky
1个回答

8

重置和重新添加(推荐)

这是最简单的方法。 如果您不想在工作目录中重置和重新添加,则没有一种简单直接的方法。您应该按照以下步骤执行:

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应用忽略空格的差异,并索引它

git checkout -- .删除未索引的“空格”更改

git reset重置索引为非空格更改

git add -p以补丁模式添加非空格更改

(此处源代码)


不用重置

这部分回答了你的问题,而不需要存储或重置。 您可以“对比和应用”仅非空格更改,类似于以下方式:

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

这是另一种方法,但请注意在这里进行补丁有点混乱,您需要缓冲并手动更改不包含空格的diff。 如果您使用VIM,请参照以下快速步骤进行缓冲化、快速查找、删除和最终应用干净的差异: : r!git diff-w --no-color 这将创建一个新的缓冲区,其中包含您的差异 :set ft=diff (可选),如果您想要语法突出显示 现在您需要手动删除不想要提交的部分,然后 :w!git apply --cached --ignore-whitespace 以应用当前已修复的diff 最后使用:!git commit -m "your fixed commit" 提交该diff。 这是第一次迭代。您需要清除缓冲区、读取未暂存的更改并重复操作:
:bd! | set ft=diff | r !git diff -w --no-color

继续前进,最终你只会留下空格更改需要提交。

如果您不想使用VIM:

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

这可能不是最快的方法,但如果您不喜欢第一种方法,它是功能性的并且能够胜任工作。

(来源和类似问题在这里)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接