Как пользователь Git, я регулярно сталкиваюсь с ситуацией, когда мне нужно переделать один или несколько коммитов таким образом, чтобы они не вписывались в коммиты исправлений --amend
или rebase -i
с ними. Обычно я делал что-то вроде
git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?
Я очень серьезно отношусь к разумно составленным сообщениям о коммитах. Обычно они содержат более крупный текст со ссылками и обоснованиями для изменения. До сих пор, я буду очень раздражен на длительный процесс восстановления моего старого коммита через несортированный git reflog
, git log
и скопировать и вставить процесс.
Есть ли способ лучше с этим справиться? И как бы это было, если my содержит более одного коммита?
Изменить: немного подумав об этом, я думаю, что я ищу некоторые функции, подобные git stash, для сообщений о фиксации, где фиксации / исправления не подходят.
источник
git reset head~1
бы, разве ваше старое сообщение о фиксации не было просто второй записью вreflog
?gitk
открыты. Таким образом, вам даже не придется использовать журнал ссылок. В качестве альтернативы используйте,rev-parse <branch>
чтобы получить хэш перед сбросом, и используйте ответ от ibizaman.Ответы:
После a
git reset
этот однострочный файл может это сделать:или даже короче:
Вы можете использовать другие параметры, предоставленные @ user2718704 .
источник
git commit -C@@{1}
git commit --reuse-message=ORIG_HEAD
что это самое ясное.При запуске команды "git commit" вы должны проверить следующие параметры:
Для повторного использования,
Чтобы отредактировать при повторном использовании,
Чтобы сменить автора,
источник
Зачем сбрасывать, если можно взломать, исправить, взломать, а потом просто запустить
git commit --amend --no-edit
; таким образом, сохраняя исходное сообщение фиксации.Чтобы заставить его работать для нескольких коммитов, просто создайте временную фиксацию с вашими новейшими изменениями, а затем используйте интерактивную перебазировку, чтобы сжать предыдущую фиксацию (содержащую хорошее сообщение фиксации) с новой временной фиксацией, сохраняя сообщение фиксации старой фиксации.
источник
fixup
инструкцию, чтобы объявить, что более поздняя фиксация предназначена для исправления предыдущей фиксации, и она будет автоматически использовать сообщение фиксации из оригинала, отклоняя сообщение из фиксации фиксации.rebase -i
. Никогда не использовал его в этом контексте. Для остальных случаев, таких как повторное слияние, другой ответ больше подходит для моего вопроса, поэтому я отметил его как ответ.Вы можете рассмотреть
git commit --reset-author -c <commit>
возможность повторного использования сообщения фиксации с редактированием и текущим временем.источник