Я хочу изменить сообщение коммита глубже в истории, и я выдвинул много новых коммитов.
Как мне изменить сообщение коммита? Является ли это возможным?
источник
Я хочу изменить сообщение коммита глубже в истории, и я выдвинул много новых коммитов.
Как мне изменить сообщение коммита? Является ли это возможным?
Сообщение от Линуса Торвальдса может ответить на ваш вопрос:
Изменить / отредактировать старые сообщения коммита
Краткий ответ: нельзя (если нажал).
выдержка (Линус называет BitKeeper как BK):
Заметка, просто из исторического интереса: в БК можно.
И если вы привыкли к этому (как я), это было действительно довольно практично. Я бы применил патч-бомбу от Эндрю, заметил, что что-то не так, и просто отредактировал ее, прежде чем выдвинуть.
Я мог бы сделать то же самое с мерзавцем. Было бы достаточно легко сделать так, чтобы просто сообщение о фиксации не было частью имени, и при этом гарантировалось, что история осталась нетронутой, и позволяло «исправить комментарии позже».
Но я не сделал.
Частично это чисто «внутренняя согласованность». Git - просто более чистая система, поскольку все защищено SHA1, и все объекты обрабатываются одинаково, независимо от типа объекта. Да, есть четыре разных типа объектов, и все они действительно разные, и их нельзя использовать одинаково, но в то же время, даже если их кодировка на диске может быть разной, концептуально все они работают точно тот же самый.
Но внутренняя согласованность не является оправданием негибкости, и, очевидно, было бы очень гибко, если бы мы могли просто исправлять ошибки после их возникновения. Так что это не очень сильный аргумент.
Реальная причина мерзавец не позволяет изменять фиксации концов сообщения до будучи очень просто: таким образом, вы можете доверять сообщениям. Если вы позволили людям изменить их впоследствии, сообщения по своей сути не очень заслуживают доверия.
Чтобы быть полным, вы можете переписать свою локальную историю коммитов, чтобы отразить то, что вы хотите, как предлагает sykora (с некоторой перебазировкой и сбросом --hard, gasp!)
Однако, как только вы опубликовать пересмотренную историю снова (с git push origin +master:master
, то +
знак заставляя толчок произойти, даже если это не приводит к «быстрому вперед» совершить) ... вы могли бы попасть в неприятность .
Выдержка из этого другого ТАК вопроса:
Я на самом деле однажды нажал --force на git.git репозиторий и получил от Линуса БОЛЬШОЕ ВРЕМЯ. Это создаст много проблем для других людей. Простой ответ «не делай этого».
В настоящее время git replace может помочь.
Подробно: создайте временную рабочую ветку
Сброс на коммит для замены
Исправьте коммит с правильным сообщением
Заменить старый коммит новым
вернуться в филиал, где вы были
удалить временную ветку
От себя
сделано.
источник
Вы можете использовать
git rebase -i
(против ответвления, от которого вы разветвились) «i» для интерактива.Замените
pick
следующий за комментарием фиксации, который вы хотите изменить,r
(илиreword
), сохраните и выйдите, и после этого вы сможете выполнить редактирование.git push
еще раз и все готово!источник
-p
аргумент о том,rebase
какиеp
резервы сливаются.Предположим, у вас есть такое дерево:
Во-первых,
checkout
временная ветка:В
temp
ветке,reset --hard
для коммита, который вы хотите изменить в своем сообщении (например, этот коммит946992
):Используйте
amend
для изменения сообщения:После этого дерево будет выглядеть так:
Затем,
cherry-pick
все коммиты, которые находятся впереди,946992
от иmaster
доtemp
коммитов, используйте,amend
если вы также хотите изменить их сообщения:Дерево теперь выглядит так:
Теперь принудительно вставьте временную ветку в удаленный режим:
Последний шаг, удалить ветку
master
на локальном,git fetch origin
чтобы вытянуть веткуmaster
с сервера, затем переключиться на веткуmaster
и удалить веткуtemp
.Теперь и ваши локальные и удаленные будут обновлять все сообщения.
источник
В нашем магазине я ввел соглашение о добавлении узнаваемых именованных тегов к коммитам с некорректными сообщениями и использовании аннотации в качестве замены.
Несмотря на то, что это не помогает людям, которые запускают случайные команды «git log», оно дает нам возможность исправить неправильные ссылки на средства отслеживания ошибок в комментариях, и все мои инструменты сборки и выпуска понимают соглашение.
Это, очевидно, не общий ответ, но это может быть что-то, что люди могут принять в конкретных сообществах. Я уверен, что если это будет использоваться в более широком масштабе, то какая-то фарфоровая подставка для него может в конечном итоге возникнуть ...
источник
(Из http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0 )
Я думаю, что должен ответить на ваш вопрос. Однако обратите внимание, что если вы отправили код в удаленный репозиторий, а люди извлекли его из него, то это испортит их историю кода, а также работу, которую они проделали. Так что делай это осторожно.
источник
Если вы используете Git Extensions: перейдите на экран Commit, там должен быть флажок с надписью «Amend Commit» внизу, как показано ниже:
источник