Как отредактировать Git "добавить патч" hunks/diffs/lines во время выборочной постановки?

У меня есть исходный файл, в котором добавлено 2 функции. Чтобы сделать выбор вишни, я бы хотел сделать это в 2 этапа: по одной для каждой функции. До сих пор в подобных ситуациях использование git add -p служило мне хорошо, чтобы зафиксировать одну функцию, оставив локальные файлы на завершающей стадии.

Однако у меня теперь есть проблема, что git add -p хочет создать комманду, которая включает изменения для обеих функций. Даже если изменения находятся на отдельных строках, s (для "split" ) больше не хочет разбить кусок на более мелкие куски...

Вкратце: я не могу отделить изменения для двух функций таким образом. Есть ли способ вручную отредактировать патч, например, с помощью vi, без фактического изменения исходного файла?

5 ответов

Как говорит Алан, отредактируйте патч, нажав e (вместо s) во время git add -p. Это запустит ваш редактор с этим куском патча, чтобы вы могли вручную его отредактировать. В тексте есть комментарии, которые объясняют, как правильно отказаться от модификаций, и на самом деле это довольно легко.

Когда вы закончите, обратите внимание, что вы можете протестировать его только с теми изменениями, которые вы только что добавили, выполнив git stash --keep-index. Изменения, которые вы не добавили в индекс, будут спрятаны, и теперь вы сможете протестировать только те изменения, которые вы собираетесь совершить. По завершении просто git stash pop или git stash apply, чтобы вернуть другие изменения.


Как и другие люди, вы можете использовать e для редактирования того, что хотите разбить.

Чтобы добавить только часть hunk, вы можете удалить строки из изменения, которое хотите разделить.

+Line 1
+Line 2
+Line 3

Предположим, вы хотите сохранить строки 1 и 3 в одной фиксации, а строка 2 - в другой. Все, что вам нужно сделать, это удалить строку 2:

+Line 1
+Line 3

Это приведет к тому, что линия 1 и линия 3 будут расположены в вашей промежуточной области. Строка 2 по-прежнему будет индексироваться, но не поставлена.


Вы можете отредактировать патч, нажав e во время git add -p. Это не повлияет на исходный файл.


Существуют графические интерфейсы Git, которые позволят вам выбрать отдельные строки, которые вы хотите выполнить, чтобы вы могли разделить строки, которые обычно не могли бы использовать обычный git add --patch из командной строки.

Два таких графических интерфейса:


Я обычно получаю конфликты слияния из git stash pop, описанных в ответе @Dan. См. git stash и отредактированные куски для решения, которое позволяет избежать конфликтов.

licensed under cc by-sa 3.0 with attribution.