Ответ 1
Вы можете попробовать следующий "трюк":
git add -A
git diff --cached -w | git apply --cached -R
Это в основном добавляет все к индексу, а затем отменяет все изменения, которые затрагивают больше, чем пробелы.
Стиль моего проекта говорит, чтобы обрезать конечные пробелы, но это делает различия очень и очень грязными. Мне нравится консолидировать их до одного фиксации до того, как я зафиксирую фактическое исправление.
Это тесно связано с добавлять только изменения без пробелов, но он задает абсолютно противоположное:
Есть ли способ добавить только изменения пробелов в промежуточную область?
Вы можете попробовать следующий "трюк":
git add -A
git diff --cached -w | git apply --cached -R
Это в основном добавляет все к индексу, а затем отменяет все изменения, которые затрагивают больше, чем пробелы.
вот решение 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
Мне пришлось объединить и изменить ответ Тобиаса и 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
позволяет команде работать с несколькими файлами.