Как правило, команда git rebase
используется в следующих целях:
- изменение предыдущих сообщений о фиксациях;
- объединение нескольких фиксаций в одну;
- удаление или отмена фиксаций, которые больше не нужны.
Предупреждение
Так как изменение журнала фиксации может затруднить все остальные пользователи, использующие репозиторий, рекомендуется перебазировать фиксации при отправке в репозиторий. Сведения о том, как безопасно перебазировать, см. в разделе Сведения о слиянии запросов на вытягивание.
Чтобы переместить все фиксации между другой ветвью и текущей, в оболочке (командной строке в Windows или терминале в MacOS и Linux) можно ввести следующую команду:
git rebase --interactive OTHER-BRANCH-NAME
Чтобы переместить последние несколько фиксаций в текущей ветви, в оболочке можно ввести следующую команду:
git rebase --interactive HEAD~7
При перемещении изменений между ветвями доступны шесть команд.
pick
pick
просто означает, что фиксация включается. Изменение порядка командpick
изменяет порядок фиксаций при перемещении изменений из одной ветви в другую. Если вы решили не включать фиксацию, удалите всю строку.reword
- Команда
reword
аналогична командеpick
, но после ее использования процесс перемещения изменений из одной ветви в другую приостанавливается, что дает возможность изменить сообщение о фиксации. Любые изменения, внесенные фиксацией, не затрагиваются. edit
- Если вы решили применить к фиксации команду
edit
, то получите возможность добавить фиксацию или изменить ее полностью. Вы также можете создать дополнительные фиксации, прежде чем продолжать перемещение изменений из одной ветви в другую. Это позволяет разделить большую фиксацию на меньшие или удалить ошибочные изменения, внесенные в фиксации. squash
- Эта команда позволяет объединить две или более фиксаций в одну. Фиксация вносится в вышестоящую. GIT дает возможность написать новое сообщение о фиксации с описанием обоих изменений.
fixup
- Эта команда похожа на
squash
, но сообщение подлежащей слиянию фиксации удаляется. Фиксация просто объединяется с вышестоящей фиксацией, сообщение которой используется для описания обоих изменений. exec
- Позволяет выполнять произвольные команды оболочки применительно к фиксации.
Независимо от используемой команды GIT запустит текстовый редактор по умолчанию и откроет файл с подробными сведениями о фиксациях в выбранном диапазоне. Этот файл выглядит примерно так:
pick 1fc6c95 A
pick 6b2481b B
pick dd1475d something I want to split
pick c619268 A fix for B
pick fa39187 something to add to A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before B
# Rebase 41a72e6..7b36971 onto 41a72e6
#
# Commands:
# 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
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Последовательно разобрав эти сведения, можно прийти к следующим выводам:
- Перечислены семь фиксаций, то есть между отправной точкой и текущим состоянием ветви произошло семь изменений.
- Фиксации, выбранные для перемещения, отсортированы в порядке от самых старых изменений (вверху) до самых новых (внизу).
- Каждая строка содержит команду (по умолчанию
pick
), SHA фиксации и сообщение о фиксации. Процедураgit rebase
сосредоточена на операциях с этими тремя столбцами. Внесенные изменения перемещаются в ваш репозиторий. - После завершения фиксаций GIT сообщает диапазон фиксаций, с которыми ведется работа (
41a72e6..7b36971
). - Наконец, GIT оказывает некоторую помощь, сообщая команды, которые доступны при перемещении фиксаций между ветвями.