git-add只有空格更改?

时间:2014-12-15 17:02:16

标签: git whitespace

我的项目的风格确实说要修剪尾随空格,但这会使差异非常非常混乱。在提交实际修复之前,我喜欢将它们合并为一个提交。

这与Add only non-whitespace changes密切相关,但问的恰恰相反:

  

有没有办法只将空白更改添加到暂存区域?

3 个答案:

答案 0 :(得分:25)

您可以尝试以下“技巧”:

git add -A
git diff --cached -w | git apply --cached -R

这基本上将所有内容添加到索引中,然后取消所有影响超过空白的更改。

答案 1 :(得分:3)

这是一个适合我的bash解决方案

for fname in $(git diff --name-only  --diff-filter=ACMR --full-index HEAD)
do
   diff=$(git diff -w --ignore-blank-lines --exit-code $fname)
   if [ $? -eq 0 ]; then
      echo "only whitespace diff on $fname ! adding to git..."
      git add $fname
   else
      echo "diff on $fname!"
   fi
done

答案 2 :(得分:1)

我必须结合并修改Tobias'和nneonneo的回答是提交具有大差异的多个文件的空白。确保从存储库的根目录运行它。

git add -A
for FILE_NAME in $(git --no-pager diff --name-only --diff-filter=ACMR --full-index HEAD)
do  
    git --no-pager diff --cached -w $FILE_NAME | git apply --cached -R  
done

git --no-pager阻止git用于显示大量内容的默认滚动。 --name-only循环允许该命令处理多个文件。