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.
- совершить
- повторить, пока не сделано.
Это может быть не самый быстрый способ, но он функционален и делает свое дело, если вам не нравится первый метод.
(источник и аналогичный вопрос здесь)