Как поставить отдельные строки в git, используя git bash? - PullRequest
3 голосов
/ 06 ноября 2019

Просто создайте папку, содержащую пустой файл test.txt, добавьте и зафиксируйте ее. Затем добавьте следующее:

new line keep

new line skip

new line bad

new line keep 2

Теперь предположим, я хочу оставить только первую и последнюю строку. В соответствии с этим ответом , я смогу разделить один кусок, используя опции git add -i -p test.txt и s, но это не работает (и опция не отображается). Я что-то пропускаю?
diff выглядит нормально:

enter image description here


Проблема с редактировать в VI : Что случилось? Я успешно изменил enter image description here

Затем я хочу выйти, но enter image description here

Ответы [ 2 ]

6 голосов
/ 06 ноября 2019

Это очень легко сделать в git gui. Выберите файл в промежуточном окне. Выделите строки, которые вы хотите, затем щелкните правой кнопкой мыши в текстовой области и выберите «Стадия строки для фиксации»

Для командной строки: выберите e, чтобы вручную разделить блок. Это вызовет текстовый редактор. Измените + на # для любых строк, которые вы не хотите ставить.

+ new line keep
+
#new line skip
#
#new line bad
#
+new line keep 2
2 голосов
/ 06 ноября 2019

(Это более длинный комментарий, требующий форматирования, чем ответ. См. Ответ EncryptedWatermelon для прямого ответа.)

Параметр «split» только для git add -pобрабатывает случай, когда блок diff имеет два слитых подмены: например,

@@ ...
 context
+new1
 context
 context
+new2
 context

может быть разделен, но:

@@ ...
 context
+new1
+new2
 context

не может быть разделен: это одно изменение, а недва изменения, контексты которых примыкали (или перекрывались) и, следовательно, были объединены в один блок.

Чтобы git add -p применил такой патч, вы должны превратить патч в инструкции для добавления (и / или удаления) толькоопределенные строки в патче. Как говорится в мета-инструкциях, это включает удаление (или комментирование) добавленных строк, которые вы не хотите добавлять в конце концов, и замену знака минуса на строках, которые вы не хотитехочу удалить. То есть:

@@ ...
 context-above
+new1
-old
+new2
 context-below

должно стать:

@@ ...
 context-above
+new1
 old
 context-below

Результатом, как вы можете увидеть, прочитав его, будет набор инструкций, которые говорят: В исходном файленайдите строки, читающие context-above, затем old, затем context-below в качестве контекста. В этом регионе вставьте новую строку new1.

В некоторых последних версиях Git возникают проблемы с правильными инструкциями по исправлению в git add -p. Если вы нажмете эти конкретные версии Git, ваши варианты - понизить Git до версии, в которой нет ошибки, обновить Git до версии, в которой исправлена ​​ошибка, или - мой личный фаворит - не заморачиваться с этим глупым "взломом«патч для создания нового патча»: просто скопируйте файл за пределы VCS.

Система контроля версий представляет собой набор инструментов. Если ни один из его молотков и пил не поможет решить вашу проблему, то нет причин использовать отвертку как зубило. Просто перенесите файл на другой рабочий стол, где есть удобная головоломка или маршрутизатор, облегчающий работу, и используйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...