Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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 и отредактированные куски для решения, которое позволяет избежать конфликтов.