Git интерактивная нестабильная часть файла или ханками
Там git add -p
, чтобы сменить изменения и git checkout -p
, чтобы отменить изменения в интерактивном режиме. Как я могу исключить изменения из индекса с помощью hunks?
(Я думал, что git unstage -p
или git reset HEAD -p
могут работать.)
Ответы
Ответ 1
Если я не ошибаюсь, то что вы хотите - это разогнать куски в интерактивном режиме? Я думал, что git reset -p
делает именно это. Его быстрое сообщение даже точно похоже на Unstage this hunk?
Также из руководства:
Это означает, что git reset -p противоположно git add -p, т.е. вы может использовать его выборочно reset hunks. См. "Интерактивный режим" раздел git -add (1), чтобы узнать, как управлять режимом -patch.
Ответ 2
Я нашел этот ответ очень полезным при изучении поэтапной подготовки, поэтому я решил изменить его на unstaging, так как я не нашел подробного ответа о стекопереходе к этому "Как выполнить нестандартную строку или часть файл?" вопрос.
Как говорит @manojlds, вы можете использовать git reset --patch <filename>
(или -p
для краткости), и git начнет разбивать ваш файл на то, что он считает разумными "кусочками" (частями файла).
Git предложит вам вариант этого вопроса:
Unstage this hunk [y,n,q,a,d,g,/,j,J,k,K,s,e,?]?
Вот описание каждой опции:
- y отключить этот кусок от следующего коммита
- n подготовить этот кусок для следующего коммита
- q выход; не расстегивайте этот кусок или любой другой оставшийся кусок
- a отключить этот кусок и все последующие фрагменты в файле
- d не удаляйте этот кусок или более поздние фрагменты в файле
- g выберите кусок, чтобы перейти к
- / поиск блока, соответствующего заданному регулярному выражению
- j оставьте этот кусок нерешенным, смотрите следующий нерешенный кусок
- J оставьте этот кусок нерешенным, см. следующий кусок
- k оставить этот кусок нерешенным, см. предыдущий нерешенный кусок
- K оставить этот кусок нерешенным, см. предыдущий кусок
- s разделить текущий кусок на более мелкие фрагменты
- e вручную редактировать текущий блок
- ? справка по распечатке
ПРИМЕЧАНИЕ ПО РЕДАКТИРОВАНИЮ РУКОВОДСТВА e: Будьте особенно осторожны при использовании режима редактирования (e), описанного выше, поскольку он не интуитивно понятен. Я включу, а затем пересмотрю встроенную документацию по git:
# To remove '+' lines, make them ' ' lines (context).
# To remove '-' lines, delete them.
# Lines starting with # will be removed.
Пересмотрен для ясности:
- Все строки, начинающиеся с
+
, являются строками, которые в настоящее время готовятся к добавлению, и теперь они не будут обработаны. Чтобы сохранить строки +
без изменений (т.е. оставить их как поэтапные изменения), замените исходный +
пробелом.
- Все строки, начинающиеся с
-
, являются строками, которые в данный момент подготовлены к удалению, и теперь они не будут обработаны. Чтобы сохранить строки -
без изменений (то есть оставить их как поэтапные изменения), полностью удалите каждую строку.
- Все строки С# являются строками комментариев и не влияют на содержание коммита.
- Согласно комментарию @Daniel-Alder :: "Это как-то опасно, если вы решите отменить операцию, находясь в редакторе, и закрыть ее без сохранения - в результате будет получен unstaging весь кусок".
После этого вы можете использовать:
git diff --staged
чтобы убедиться, что вы пометили/поставили правильные изменения
git add -p
для постановки ошибочно удаленных блоков
git commit -v
для просмотра вашего коммита во время редактирования сообщения о коммите.
Ссылка на будущее: Git Tools - Интерактивная постановка