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

Git интерактивная нестабильная часть файла или ханками

Там git add -p, чтобы сменить изменения и git checkout -p, чтобы отменить изменения в интерактивном режиме. Как я могу исключить изменения из индекса с помощью hunks?

(Я думал, что git unstage -p или git reset HEAD -p могут работать.)

4b9b3361

Ответ 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 - Интерактивная постановка