Как отредактировать Git "добавить патч" hunks/diffs/lines во время выборочной постановки?
У меня есть исходный файл, в котором добавлено 2 функции. Чтобы сделать выбор вишни, я бы хотел сделать это в 2 этапа: по одной для каждой функции. До сих пор в подобных ситуациях использование git add -p
служило мне хорошо, чтобы зафиксировать одну функцию, оставив локальные файлы на завершающей стадии.
Однако у меня теперь есть проблема, что git add -p
хочет создать комманду, которая включает изменения для обеих функций. Даже если изменения находятся на отдельных строках, s
(для "split" ) больше не хочет разбить кусок на более мелкие куски...
Вкратце: я не могу отделить изменения для двух функций таким образом. Есть ли способ вручную отредактировать патч, например, с помощью vi, без фактического изменения исходного файла?
Ответы
Ответ 1
Как говорит Алан, отредактируйте патч, нажав e
(вместо s
) во время git add -p
. Это запустит ваш редактор с этим куском патча, чтобы вы могли вручную его отредактировать. В тексте есть комментарии, которые объясняют, как правильно отказаться от модификаций, и на самом деле это довольно легко.
Когда вы закончите, обратите внимание, что вы можете протестировать его только с теми изменениями, которые вы только что добавили, выполнив git stash --keep-index
. Изменения, которые вы не добавили в индекс, будут спрятаны, и теперь вы сможете протестировать только те изменения, которые вы собираетесь совершить. По завершении просто git stash pop
или git stash apply
, чтобы вернуть другие изменения.
Ответ 2
Как и другие люди, вы можете использовать e
для редактирования того, что хотите разбить.
Чтобы добавить только часть hunk, вы можете удалить строки из изменения, которое хотите разделить.
+Line 1
+Line 2
+Line 3
Предположим, вы хотите сохранить строки 1 и 3 в одной фиксации, а строка 2 - в другой. Все, что вам нужно сделать, это удалить строку 2:
+Line 1
+Line 3
Это приведет к тому, что линия 1 и линия 3 будут расположены в вашей промежуточной области. Строка 2 по-прежнему будет индексироваться, но не поставлена.
Ответ 3
Вы можете отредактировать патч, нажав e
во время git add -p
. Это не повлияет на исходный файл.
Ответ 4
Существуют графические интерфейсы Git, которые позволят вам выбрать отдельные строки, которые вы хотите выполнить, чтобы вы могли разделить строки, которые обычно не могли бы использовать обычный git add --patch
из командной строки.
Два таких графических интерфейса:
Ответ 5
Я обычно получаю конфликты слияния из git stash pop
, описанных в ответе @Dan. См. git stash и отредактированные куски для решения, которое позволяет избежать конфликтов.