Git добавить строки к индексу grep/regex
У меня есть гигантский патч, который я хотел бы разбить на несколько логических git коммитов. Большое количество изменений - это просто изменение имен переменных или вызовов функций, так что они могут быть легко расположены с помощью grep. Если бы я мог добавить в индекс любые изменения, которые соответствуют регулярному выражению, а затем очистить в git gui, это спасло бы меня от ручной работы. Есть ли хороший способ обновить индекс поэтапно, используя регулярное выражение внутри git или из некоторого вывода grep (например, номера строк)?
Я нашел аналогичный вопрос, но я не уверен, как создать временный файл из поиска в виде регулярного выражения.
Ответы
Ответ 1
patchutils имеет команду grepdiff
, которая может быть использована для достижения этой цели.
# check that the regex search correctly matches the changes you want.
git diff -U0 | grepdiff 'regex search' --output-matching=hunk
# then apply the changes to the index
git diff -U0 | grepdiff 'regex search' --output-matching=hunk | git apply --cached --unidiff-zero
Я использую -U0
на diff, чтобы избежать получения несвязанных изменений. Возможно, вы захотите изменить это значение, чтобы удовлетворить вашу ситуацию.
Ответ 2
Проще говоря, вы можете использовать git add -p
и использовать опцию /
для поиска через ваш diff для добавляемых патчей. Он не полностью автоматизирован, но проще, чем другие альтернативы, которые я нашел.
Ответ 3
Вы могли бы сначала запустить:
git s | grep "your_pattern"
Если выходные данные соответствуют назначению, добавьте файлы в индекс:
git a $(git s | grep "your_pattern")
Ответ 4
xargs - это то, что вы ищете. Попробуйте следующее:
grep -irl 'regex_term_to_find' * | xargs -I FILE git add FILE
До трубы |
- это стандартная команда grep для поиска всех файлов *
. Возможные варианты:
-
i
- нечувствительность к регистру
-
r
- рекурсивный через каталоги
-
l
- список имен файлов
В xargs
часть инструкции FILE
- это имя переменной, которая будет использоваться для каждого аргумента/соответствия, переданного командой grep. Затем введите нужную команду, используя соответствующую переменную.