只添加非

我有我的文本编辑器在保存文件时自动修剪尾随空白,并且我正在为一个开放源代码项目做出贡献,该项目对尾随空白有严重问题。

每次我尝试提交补丁时,我都必须首先忽略所有只有空白的变化,以便只选择相关信息。 不仅如此,当我运行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
补丁<变化

检查剩余的差异,然后addcommit

Mercurial的等价物是这样做的:

hg diff>备份
hg diff -w>改变
hg恢复 - 所有
hg import - 无提交更改

链接地址: http://www.djcxy.com/p/57237.html

上一篇: Add only non

下一篇: See what's in a stash without applying it