Измените старое сообщение фиксации на Git

Я пытался изменить старое сообщение фиксации, как описано здесь.

Дело в том, что теперь, когда я пытаюсь запустить rebase -i HEAD~5, он говорит interactive rebase already started.

Итак, я пытаюсь: git rebase --continue, но получил эту ошибку:

error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.

Любые идеи?

Ответ 1

В нем говорится:

Когда вы сохраняете и выходите из редактора, он перематывает вас назад к последнему фиксации в этом списке и бросает вас в командной строке со следующим сообщением:

$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with

Это не означает:

снова введите git rebase -i HEAD~3

Попробуйте не печатать git rebase -i HEAD~3 при выходе из редактора, и он должен работать нормально.
(иначе, в вашей конкретной ситуации, git rebase -i --abort может понадобиться для reset всего и позволить вам попробовать еще раз)


Как Дэйв Фогт упоминает в комментариях, git rebase --continue предназначен для перехода к следующей задаче в процессе перезагрузки после того, как вы внесли поправки в первый коммит.

Кроме того, Грегг Линд упоминает в своем ответе команду reword git rebase:

Заменив команду "pick" командой "edit", вы можете сказать git rebase остановиться после применения этой фиксации, чтобы вы могли редактировать файлы и/или сообщение фиксации, изменять фиксацию и продолжать перебазирования.

Если вы просто хотите отредактировать сообщение фиксации для фиксации, замените команду "pick" командой "reword" , так как Git1.6.6 (январь 2010 г.).

Он делает то же самое, что и edit во время интерактивной переустановки, кроме , он позволяет редактировать сообщение фиксации без возврата к оболочке. Это очень полезно. В настоящее время, если вы хотите очистить свои сообщения о фиксации, вы должны:

$ git rebase -i next

Затем установите все коммиты для редактирования. Затем на каждом из них:

# Change the message in your editor.
$ git commit --amend
$ git rebase --continue

Использование 'reword вместо' edit позволяет пропустить вызовы git-commit и git-rebase.

Ответ 2

FWIW, git rebase interactive теперь имеет опцию "reword", что делает это гораздо менее болезненным!

Ответ 3

Вы можете сделать это следующим образом, так как @gregg сказал использовать слово reword

git rebase -i HEAD~n

Здесь n - список последних n коммитов.

Например, если вы используете git rebase -i HEAD~4

pick e459d80 Do xyz
pick 0459045 Do something
pick 90fdeab Do blah blah blah
pick 90fdeab Do pqr

Теперь замените слово pick на reword для фиксации, которую вы хотите изменить.

    pick e459d80 Do xyz
    reword 0459045 Do something
    reword 90fdeab Do blah blah blah
    pick 90fdeab Do pqr

Теперь закройте и сохраните это, вы получите возможность редактировать сообщение фиксации, для которого вы использовали reword в следующих окнах.

Вы также можете указать официальный документ здесь