清理空白更改

时间:2018-04-05 07:43:10

标签: git removing-whitespace

在工作中,我使用Visual Studio和Resharper在C#中进行编码,它可以自由地改变空白,包括断行,甚至是代码我没有编辑。

这适用于我编写的新代码,甚至是我编辑的旧代码,但对于旧代码我没有触及,它会导致git差异中出现大量错误

我通常遵循的工作流程是创建一个新分支,并在那里进行更改,并在准备好进行审核时进行推送。

但在推动之前,我想清除所有仅仅是空白变化的变化。即行如此分割:

a + b + c

a +
b +
c

以及其他各种不会改变C#代码行为的空白变化,因为它没有给空白赋予意义。

当然,我不想停止任何空白更改,显然我可能会在提交之间更改新代码的空白。

但是,我在我的分支机构中触及的代码中,我希望删除任何空白更改。

我只想在最后一次推送之前进行提交,它会回滚所有只有空格的更改,与初始分支的点相比。

有没有办法做这个或者编写脚本的好方法?

我尝试使用以下脚本:

#!/bin/bash

BRANCH_BASE=$(git merge-base --fork-point origin/dev)
git diff $BRANCH_BASE HEAD -w --word-diff-regex=[^[:space:]] > /tmp/no_whitespace_changes.patch
git checkout $BRANCH_BASE
git apply /tmp/no_whitespace_changes.patch

我的意图是在分支头顶部进行重新定位,但是在运行此代码时出现fatal: corrupt patch at line 6错误,所以我显然做了一些可怕的错误。

但也许还有更好的方法可以解决这个问题。我觉得别人会遇到同样的问题,所以我不想重新发明轮子。

1 个答案:

答案 0 :(得分:0)

就个人而言,我不想要额外的提交来回滚我未触及的文件的更改。永远不应该添加它们。这只会增加git历史的混乱。

我首先要看看是否有办法将Resharper配置为不太兴奋。也许只有在文件内容发生变化或实际触摸文件时才会运行。

在最坏的情况下,我不会再添加另一个提交来回滚更改,而是重新调整HEAD并仅应用那些更改的文件。带有空格更改的原始提交仍然存在,但它不会最终出现在主分支上。