Этот вопрос в основном сводится к «как изменить коммит, который не является последним?». Предполагая, что вы нигде не подталкивали фиксацию, и, полагая, что история является линейной от этой фиксации, она довольно проста.
- Внесите изменения, которые вы хотите применить к своей более ранней фиксации.
- Выясните, что было сделано ранее, когда вы хотите изменить. Ради этих инструкций мы назовем это
$SHA
, но вы можете использовать любые средства, которые вы хотите идентифицировать.
- Пробег
git commit --fixup $SHA
.
- Run
git rebase -i --autosquash $SHA^
Это даст вам редактор со списком фиксаций. Первая фиксация должна быть $SHA
, вторая должна быть вашей правкой, а следующая за ней должна быть остальная сумма до HEAD
. Сохраните и закройте этот редактор. Теперь Git сделает интерактивную перезагрузку, применив ваше изменение к фиксации, которую вы хотите изменить.
Есть альтернативное решение, которое вы можете использовать, которое немного более ручное, но работает без интерактивной переустановки. В принципе, вы можете проверить фиксацию, которую хотите изменить напрямую (создавая отдельную голову), внести изменения, запустите git commit --amend
, а затем перетащите ветку поверх новой измененной фиксации. Вы можете предпочесть этот стиль, поскольку он немного более ясен в отношении того, что вы делаете, но преимущество интерактивной версии rebase заключается в том, что вы можете делать гораздо больше вещей с помощью интерактивной rebase. Например, вы можете переупорядочить коммиты, сквонировать несколько коммитов вместе, удалять коммиты, комментировать заново и т. Д. Вы также можете использовать флагов и --squash
для git commit
, чтобы записывать эти действия, которые вы хотите выполнить, не выполняя сразу же переадресацию, а затем вы можете вернуться и сделать одну большую интерактивную переустановку, когда закончите.
Будет ли коммит, который я хочу изменить, первым фиксатором ветки? Ошибочные строки отображаются в разнице между этим фиксатором и последним от мастера, просто переустанавливаются. – Umbrella
, пожалуйста, объясните, «затем переустановите ветку поверх новой измененной фиксации». Я не понимаю, должен ли я запускать 'git rebase [branch]' в то время как в отдельной голове, или 'git rebase [commit]' after. – Umbrella
@ Зонт: любой фиксатор вводит строки, которые вы хотите изменить, та, которую вы хотите настроить. Похоже, что это первая фиксация из вашей ветки. Что касается объяснения, когда вы находитесь на своей отдельной голове, после внесения изменений в коммит, вы можете использовать 'git rebase HEAD [branch]' (который проверяет ветвь и переустанавливает ее поверх того, что было 'HEAD', т.е. измененная фиксация). –