Ответы:
Если вы добавите --preserve-mergesпараметр (или его синоним -p) к git rebase -iкоманде, то git попытается сохранить слияния при перебазировании, а не линеаризировать историю, и вы также сможете изменить коммиты слияния:
git rebase -i -p HEAD~5
HEAD~5находится родительский коммит, который вы хотите изменить (обычно sha1 ^).
--preserve-mergesсейчас--rebase-merges
Обратите внимание, что начиная git1.7.9.6 (и git1.7.10 +), git mergeон всегда будет запускать редактор , чтобы вы добавляли детали к слиянию.
«
git merge $tag» для слияния аннотированного тега всегда открывает редактор во время сеанса интерактивного редактирования. Серия v1.7.10 представила переменную среды GIT_MERGE_AUTOEDIT, чтобы помочь старым сценариям отказаться от этого поведения, но дорожка обслуживания также должна поддерживать ее.
Он также вводит переменную окружения, GIT_MERGE_AUTOEDITчтобы помочь старым сценариям отказаться от этого поведения.
Смотрите « Предвидение Git 1.7.10 »:
Недавно в обсуждении списка рассылки Git Линус признал (и я согласился), что это была одна из ошибок проектирования, которые мы допустили в начале истории Git.
И в 1.7.10 и позже, команда git merge, которая запускается в интерактивном сеансе (т. Е. Как ее стандартный ввод, так и стандартный вывод, подключенный к терминалу), откроет редактор перед созданием коммита для записи результата слияния, чтобы дать пользователь может объяснить слияние, как команда git commit, которую пользователь запускает после разрешения конфликтующего слияния.
Линус сказал:
Но мне не очень важно, как это работает на самом деле - моя главная проблема в том, что git делает слишком легким получение плохих сообщений слияния.
Я думаю, что отчасти это еще более простой идиотизм: мы никогда не запускаем редактор по умолчанию для «git merge», но мы делаем для «git commit».
Это было ошибкой дизайна, и это означает, что если вы хотите добавить заметку к слиянию, вам нужно проделать дополнительную работу. Так люди не делают .
Обратите внимание, что до Git 2.17 (Q2 2018) " git rebase -p" искаженные сообщения журнала фиксации слияния, которая теперь исправлена.
См. Комм. Ed5144d (08 февраля 2018 г.) Грегори Эрреро (``) . Предложено
: Вегард Носсум ( vegard) и Квентин Касасновас ( casasnovas) .
(Слиты Junio C Hamano - gitster- в фиксации 8b49408 , 27 Feb 2018)
rebase -p: исправить некорректное сообщение при звонкеgit merge.Поскольку commit dd6fb00 ("
rebase -p: исправлять кавычки при вызовеgit merge", январь 2018 г., Git 2.16.0-rc2), сообщение коммита перебазируемого коммита слияния передается команде слияния с использованием подоболочки, выполняющей 'git rev-parse --sq-quote'.Двойные кавычки необходимы вокруг этой подоболочки, так что для
git mergeкоманды сохраняются символы новой строки .Перед этим патчем следующее сообщение о слиянии:
"Merge mybranch into mynewbranch Awesome commit."будет выглядеть так:
"Merge mybranch into mynewbranch Awesome commit."после
rebase -p.
С 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 :
git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch
или лучшая (более правильная) последняя команда rebase:
git rebase <sha of merge> previous_branch --onto HEAD
Кстати, использование примитивных команд может иметь приятную «особенность», заключающуюся в том, что вы не потребляете слишком много ресурсов ЦП и заставляете вас ждать неизвестное время, пока 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 ....
Это откроет сообщение фиксации в редакторе во время перебазирования, где вы можете изменить его.
Команда git rebase -i HEAD~5выскакивает в редактор. В нем перечислены указанные коммиты (в данном случае пять из них). Первый столбец содержит pickдля каждого коммита. Просто замените pickс rewordв этом редакторе и сохранить + закройте редактор. Тогда мерзавец появится редактор для каждой фиксации , где вы изменили , pickчтобы rewordи позволит вам отредактировать сообщение фиксации.
-pв git rebaseкоманду.
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to