Как переименовать любой коммит в git?

Рейтинг: 5Ответов: 1Опубликовано: 10.09.2014

Хочу переименовать десяток коммитов, но что-то не могу разобраться, как это сделать. Вот, к примеру, статья тут, но у меня загвоздка после git rebase --interactive, то есть редактор открывается такой же, но а дальше куда и что писать? Если пытаюсь написать что-то, то у меня почему-то пишет в самом низу и по одному символу. Делал я это на windows через терминал в SourceTree. Может, есть какой-то другой способ?

Ответы

▲ 7Принят

git rebase --interactive вам покажет в текстовом редакторе своего рода план: список коммитов и действий, которые к ним будут применены. По умолчанию всем коммитам сопоставлено действие pick - сохранить как есть. Ваша первая задача отредактировать действия на свой вкус. Доступные действия описаны в комментарии, отбитом символом #.

#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell

Вас в первую очередь интересует команда r reword - изменить текст сообщения. Не знаю, как SourceTree, а обычный шелл из пакета msysgit (мы ведь о Windows говорим?) предлагает в качестве редактора православный vim. Если у вас так же, и вы с ним не знакомы - смело давите кнопку i на клавиатуре и vim перейдет в режим редактирования. У нужных коммитов замените pick на reword. Теперь надо вернуться в командный режим, нажав Esc. Сохраняемся и выходим - набирайте на клавиатуре :wq, жмите Enter.

Редактор закроется, и git приступит к выполнению вашего плана. Для каждого коммита, помеченного действием reword, он откроет вам редактор и предложит отредактировать сообщение. Опять-таки, если у вас vim - жмем i, редактируем, Esc, сохраняем :wq. На комментарий под текстом коммита, отбитый решеткой, не обращайте внимания. Он просто подсказывает вам, что делать, и в текст сообщения не попадет.