只添加非
我有我的文本编辑器在保存文件时自动修剪尾随空白,并且我正在为一个开放源代码项目做出贡献,该项目对尾随空白有严重问题。
每次我尝试提交补丁时,我都必须首先忽略所有只有空白的变化,以便只选择相关信息。 不仅如此,当我运行git rebase
我通常会因为它们而遇到几个问题。
因此,我希望能够以与git add -p
相似的方式添加仅索引非空白更改,但无需自行选择所有更改。
有谁知道如何做到这一点?
编辑:我无法改变项目的工作方式,他们在邮件列表上讨论后决定忽略这一点。
@Frew解决方案不是我所需要的,所以这是我为完全相同的问题所做的别名:
alias.addnw=!sh -c 'git diff -U0 -w --no-color "$@" | git apply --cached --ignore-whitespace --unidiff-zero -'
或者你可以简单地运行:
git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero -
更新
根据这个评论,分别添加了选项-U0
和--unidiff-zero
来解决上下文匹配问题。
基本上,它适用的将与应用补丁add
无空白的变化。 你会注意到,在git addnw your/file
仍然会有未分离的变化,这是剩下的空白。
- 无颜色不是必需的,但因为我将颜色设置为始终,我必须使用它。 无论如何,比对不起更安全。
这适用于我:
如果你想保持藏身,这是有效的
git stash && git stash apply && git diff -w > foo.patch && git checkout . && git apply foo.patch && rm foo.patch
我不喜欢这些窗口,但是我遇到了git + cygwin中的一个bug,在这里我失去了更改,所以为了确保这些东西进入了reflog,至少我设置了以下内容:
git add . && git commit -am 'tmp' && git reset HEAD^ && git diff -w > foo.patch && git checkout . && git apply foo.patch && rm foo.patch
基本上我们创建一个不包含空间变化的差异,恢复我们所有的变化,然后应用差异。
创建一个只包含实际更改的修补程序文件(不包括仅有空白更改的行),然后清理工作空间并应用该修补程序文件:
git diff>备份
git diff -w>更改
git reset --hard
补丁<变化
检查剩余的差异,然后add
和commit
。
Mercurial的等价物是这样做的:
hg diff>备份
hg diff -w>改变
hg恢复 - 所有
hg import - 无提交更改
上一篇: Add only non