Как отредактировать Git "добавить патч", ссылки / различия / строки во время выборочной постановки? - PullRequest
25 голосов
/ 25 февраля 2010

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

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

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

Ответы [ 5 ]

26 голосов
/ 25 февраля 2010

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

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

6 голосов
/ 25 февраля 2010

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

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

+Line 1
+Line 2
+Line 3

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

+Line 1
+Line 3

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

5 голосов
/ 25 февраля 2010

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

1 голос
/ 14 июля 2013

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

Два таких GUI:

  1. SourceTree .
  2. Гит-кола .
0 голосов
/ 08 ноября 2011

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

...