Git add -patch... но игнорировать изменения пробелов

Я не могу найти хороший способ использовать git add -p но скажите git игнорировать все изменения пробелов. Я не хочу сбрасывать свои локальные изменения.

Ситуация: у меня были все мои изменения локально, и я группировал их в отдельные коммиты. Затем я поэкспериментировал с минифайером и переписал все мои css-файлы их минимизированной версией. Я пытался "все минимизировать", но он все равно испортил git diff - потому что было так много изменений в пробелах - и я не могу вернуть свой репо туда, где я могу увидеть реальные изменения.

Спасибо за помощь!

1 ответ

Сброс и чтение (рекомендуется)

Это самый простой способ. Там нет прямой прямой путь, если вы не хотите сбрасывать и читать в вашем рабочем каталоге. Вы должны сделать именно это, вот хороший способ, объясненный шаг за шагом:

git diff -w --no-color | git apply --cached --ignore-whitespace && git checkout -- . && git reset && git add -p

git diff -w --no-color создает diff без форматирования терминала и цветов

git apply --cached --ignore-whitespace применяет разницу, игнорирующую пробел, и индексирует ее

git checkout -- . удаляет неиндексированные "пробельные" изменения

git reset сбрасывает индекс только для изменений без пробелов

git add -p добавляет изменения без пробелов в режиме патча

( источник здесь)


Без сброса

Это частично отвечает вашей проблеме, без сохранения или сброса. Вы можете "изменить и применить" только изменения без пробелов, следующим образом:

git diff -w --no-color | git apply --cached --ignore-whitespace

Это другой способ, но, пожалуйста, обратите внимание, что внесение исправлений здесь немного беспорядочно, вам нужно буферизовать и вручную изменять diff, удаляя пробелы. Если вы используете VIM, вот быстрые пошаговые команды, которые вы можете использовать для буферизации, быстрого поиска, удаления и, наконец, применения чистых различий:

:r !git diff -w --no-color это создает новый буфер с вашим diff

:set ft=diff (необязательно) используйте это, если вы хотите подсветку синтаксиса

Теперь вам нужно вручную удалить то, что вы не хотите ставить, затем

:w !git apply --cached --ignore-whitespace применить текущий фиксированный diff

и в конечном итоге совершить этот дифференциал с :!git commit -m "your fixed commit"

Вот первая итерация. Вам нужно очистить буфер, прочитать неустановленные изменения и повторить:

:bd! | set ft=diff | r !git diff -w --no-color

продолжайте и, в конце концов, вам останутся только изменения пробелов для фиксации.

Если вы не хотите использовать VIM:

  • дамп git diff в файл
  • отредактируйте файл с вашей любимой IDE/ текстовым редактором
  • подать отредактированный файл в git apply.
  • совершить
  • повторить, пока не сделано.

Это может быть не самый быстрый способ, но он функционален и делает свое дело, если вам не нравится первый метод.

(источник и аналогичный вопрос здесь)

Другие вопросы по тегам