Git: Как отредактировать/переписать сообщение об объединении слиянием?

Как мне изменить или переписать сообщение об ошибке слияния?

git commit --amend работает, если это последнее сделанное совершение (HEAD), но что, если оно доходит до HEAD?

git rebase -i HEAD~5 не перечисляет комманды слияния.

98
задан ma11hew28 02 сент. '11 в 7:18
источник поделиться
4 ответов

Если вы добавите опцию --preserve-merges (или ее синоним, -p) в команду git rebase -i, тогда git попытается сохранить слияния при перезагрузке, а не линеаризации истории, и вы должны быть способны для исправления слияния также:

git rebase -i -p HEAD~5
133
ответ дан Mark Longair 02 сент. '11 в 7:47
источник поделиться

Обратите внимание, что начало git1.7.9.6 (и git1.7.10 +), git merge сам будет всегда запускать editor, чтобы вы могли добавлять сведения о слиянии.

"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".
Это была ошибка дизайна, и это означает, что если вы хотите добавить примечание к слиянию, вам нужно сделать дополнительную работу. Поэтому люди не
.

26
ответ дан VonC 03 апр. '12 в 8:55
источник поделиться

Еще один приятный ответ, используя только примитивные команды - knittl qaru.site/questions/58215/...:

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

BTW, используя примитивные команды, может иметь приятную "особенность" не потреблять слишком много CPU и заставлять вас ждать неизвестного времени, пока Git не закончит думать о списке коммитов, нуждающихся в переустановке в случае git rebase -p -i HEAD^^^^ (такая команда, которая привела бы к списку из 4 последних коммитов с объединением, поскольку последний в моем случае в моем случае занял около 50 секунд!).

3
ответ дан imz -- Ivan Zakharyaschev 01 марта '17 в 18:34
источник поделиться

Команда git rebase -i HEAD~5 выведет редактор. В нем перечислены указанные коммиты (в данном случае пять из них). В первом столбце содержится pick для каждой фиксации. Просто замените pick на reword в этом редакторе и сохраните + закройте редактор. Затем git выведет редактор для каждой фиксации, где вы изменили pick на reword, и вы сможете отредактировать сообщение фиксации.

0
ответ дан ChrisD 10 янв. '12 в 8:24
источник поделиться

Другие вопросы по меткам