Как мне отредактировать или переформулировать сообщение коммита слияния?
git commit --amend
работает, если это последний коммит made ( HEAD
), но что, если он наступит раньше HEAD
?
git rebase -i HEAD~5
не перечисляет коммиты слияния.
Если вы добавите --preserve-merges
параметр (или его синоним -p
) к git rebase -i
команде, то git попытается сохранить слияния при перебазировании, а не линеаризировать историю, и вы также сможете изменить коммиты слияния:
git rebase -i -p HEAD~5
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to
HEAD~5
находится родительский коммит, который вы хотите изменить (обычно sha1 ^).--preserve-merges
сейчас--rebase-merges
Обратите внимание, что начиная git1.7.9.6 (и git1.7.10 +),
git merge
он всегда будет запускать редактор , чтобы вы добавляли детали к слиянию.Он также вводит переменную окружения,
GIT_MERGE_AUTOEDIT
чтобы помочь старым сценариям отказаться от этого поведения.Смотрите « Предвидение Git 1.7.10 »:
Линус сказал:
Обратите внимание, что до Git 2.17 (Q2 2018) "
git rebase -p
" искаженные сообщения журнала фиксации слияния, которая теперь исправлена.См. Комм. Ed5144d (08 февраля 2018 г.) Грегори Эрреро (``) . Предложено
: Вегард Носсум (
vegard
) и Квентин Касасновас (casasnovas
) .(Слиты Junio C Hamano -
gitster
- в фиксации 8b49408 , 27 Feb 2018)С Git 2.23 (Q2 2019), "
merge -c
" инструкция во время "git rebase --rebase-merges
" должна дать пользователю возможность редактировать сообщение журнала, даже если в противном случае нет необходимости создавать новое слияние и заменять существующее (например, быстрая перемотка вперед). ), но не сделал.Который был исправлен.
См. Коммит 6df8df0 (02 мая 2019 г.) Филиппа Вуда (
phillipwood
) .(Слиты Junio C Hamano -
gitster
- в фиксации c510261 , 13 июня 2019)источник
Еще один приятный ответ, используя только примитивные команды - от knittl https://stackoverflow.com/a/7599522/94687 :
или лучшая (более правильная) последняя команда rebase:
Кстати, использование примитивных команд может иметь приятную «особенность», заключающуюся в том, что вы не потребляете слишком много ресурсов ЦП и заставляете вас ждать неизвестное время, пока Git не закончит думать о списке коммитов, которые необходимо перебазировать в случае
git rebase -p -i HEAD^^^^
(такая команда, которая приведет к список только 4 последних коммитов с слиянием, так как последний в моем случае в моем случае занял около 50 секунд!).источник
git merge --edit
Позволяет дать комментарий даже в случае неинтерактивного слияния.
git merge --edit --no-ff
может быть полезно, если вы следите за потоком мерзавцев, перебирая ветку разработки и сливаясь с ней без быстрой перемотки вперед.источник
Для текущих версий Git (Mai 2020):
git rebase -i -r <parent>
,затем замените в редакторе
merge -C ...
наmerge -c ...
.Это откроет сообщение фиксации в редакторе во время перебазирования, где вы можете изменить его.
(Спасибо VonC за подсказку .)
источник
Команда
git rebase -i HEAD~5
выскакивает в редактор. В нем перечислены указанные коммиты (в данном случае пять из них). Первый столбец содержитpick
для каждого коммита. Просто заменитеpick
сreword
в этом редакторе и сохранить + закройте редактор. Тогда мерзавец появится редактор для каждой фиксации , где вы изменили ,pick
чтобыreword
и позволит вам отредактировать сообщение фиксации.источник
-p
вgit rebase
команду.