По ленивым причинам я выдвинул кучу коммитов с сообщениями по умолчанию, и теперь это стало громоздким, поскольку я действительно не знаю, что я изменял в каждом коммите.
Как мне отредактировать только сообщения предыдущих коммитов и (если возможно) сохранить дерево коммитов?
Ответы:
Чтобы редактировать сообщения коммитов серии коммитов, я запускаю
где
firstsha
- идентификатор родительского коммита первого коммита, который я хочу отредактировать. (Вы можете использовать любую действительную ссылку здесь, поэтомуgit rebase -i HEAD~4
покажет последние четыре коммита.)В открывшемся редакторе измените все записи «pick» на «reword» для коммитов, которые вы хотите изменить, затем закройте редактор; Затем вас попросят ввести сообщения о коммите для всех коммитов, которые вы выбрали.
Обратите внимание , что это будет изменить дерево совершить, потому что хэши коммитов изменится. Вам придется принудительно толкнуть новое дерево или перенести его в новую ветвь. Это также может испортить слияния, поэтому избегайте редактирования коммитов слияния.
Чтобы быстро редактировать только последний коммит, запустите
(но остерегайтесь всего, что сделано для фиксации, хотя).
источник
preserve-merges
)То, что вы ищете, это
git rebase
.Если вы хотите изменить только предыдущее
git commit
сообщение, вам нужно использовать только следующее:И внесите необходимые изменения в предыдущий коммит, а затем сохраните изменения.
Однако, если вам нужно изменить старые коммиты, вам нужно использовать
rebase
.где N равно числу коммитов, к которым вы хотите вернуться, например, 2, 12, 6 и т. д. и т. д.
Здесь вы должны получить текстовый редактор с вашими коммитами. Измените параметр с
pick
на,reword
чтобы изменить сообщение.После того как вы определили все коммиты, которые вы хотите изменить, и соответствующим образом изменили их параметры, сохраните и закройте редактор. Затем внесите изменения в каждое сообщение о коммите. Как только вы удовлетворены, вы можете запустить:
И вы должны были поддерживать свою историю git, хотя и с другими значениями хэша, потому что вы внесли необходимые изменения, которые вы хотите. Вот некоторые дополнительные ссылки, которые вы должны проверить:
7.6 Git Tools - Переписывание истории
Справка GitHub - Изменение сообщения
фиксации StackOverflow - Вопрос об изменении старых сообщений фиксации
источник
commit --amend
», если только вы не испортили процесс фиксации.git rebase -i firstsha
этоfirstsha
хэш родительского коммита коммита, который я хотел бы изменить сообщение, затем в редакторе, изменитьpick
наreword
,enter
новое сообщение, затем выполнитьgit rebase --continue
и делатьgit push --force
?git rebase -i HEAD~N
N было числом коммитов назад, которое вы хотите выполнить. Измените каждый параметр фиксации, для которого вы хотите отредактировать сообщение отpick
доreword
, сохраните этот файл, внесите изменения в каждый из этих файлов фиксации и сохраните их. Как только вы уверены, что вы сделали, вам нужно толькоgit push --force [Name of git branch you are were working on]
. Вы всегда можете вернуться и сделать это снова или сделать это поэтапно.