8.9 KiB
title, redirect_from, intro, versions, ms.openlocfilehash, ms.sourcegitcommit, ms.translationtype, ms.contentlocale, ms.lasthandoff, ms.locfileid
| title | redirect_from | intro | versions | ms.openlocfilehash | ms.sourcegitcommit | ms.translationtype | ms.contentlocale | ms.lasthandoff | ms.locfileid | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| О перемещении изменений между ветвями в Git |
|
Команда `git rebase` позволяет легко изменить ряд фиксаций, изменив журнал репозитория. Вы можете переупорядочивать, изменять фиксации или выполнять их сжатие. |
|
83518644864623c452f7fa1e8bd4cbd42f80a7cf | d697e0ea10 |
MT | ru-RU | 10/20/2022 | 148094372 |
Как правило, команда git rebase используется в следующих целях:
- изменение предыдущих сообщений о фиксациях;
- объединение нескольких фиксаций в одну;
- удаление или отмена фиксаций, которые больше не нужны.
{% warning %}
Предупреждение. Так как изменение журнала фиксаций может затруднить работу всех остальных пользователей репозитория, перемещать фиксации из одной ветви в другую после отправки в репозиторий не рекомендуется. Сведения о безопасном перебазе данных на {% variables.location.product_location %}см. в разделе "Сведения о слиянии запросов на вытягивание".
{% endwarning %}
Перемещение фиксаций между ветвями
Чтобы переместить все фиксации между другой ветвью и текущей, в оболочке (командной строке в Windows или терминале в MacOS и Linux) можно ввести следующую команду:
$ git rebase --interactive OTHER-BRANCH-NAME
Перемещение фиксаций на момент времени
Чтобы переместить последние несколько фиксаций в текущей ветви, в оболочке можно ввести следующую команду:
$ git rebase --interactive HEAD~7
Команды, доступные при перемещении изменений между ветвями
При перемещении изменений между ветвями доступны шесть команд.
pickpickпросто означает, что фиксация включается. Изменение порядка командpickизменяет порядок фиксаций при перемещении изменений из одной ветви в другую. Если вы решили не включать фиксацию, удалите всю строку.reword- Команда
rewordаналогична командеpick, но после ее использования процесс перемещения изменений из одной ветви в другую приостанавливается, что дает возможность изменить сообщение о фиксации. Любые изменения, внесенные фиксацией, не затрагиваются. edit- Если вы решили применить к фиксации команду
edit, то получите возможность добавить фиксацию или изменить ее полностью. Вы также можете создать дополнительные фиксации, прежде чем продолжать перемещение изменений из одной ветви в другую. Это позволяет разделить большую фиксацию на меньшие или удалить ошибочные изменения, внесенные в фиксации. squash- Эта команда позволяет объединить две или более фиксаций в одну. Фиксация вносится в вышестоящую. GIT дает возможность написать новое сообщение о фиксации с описанием обоих изменений.
fixup- Эта команда похожа на
squash, но сообщение подлежащей слиянию фиксации удаляется. Фиксация просто объединяется с вышестоящей фиксацией, сообщение которой используется для описания обоих изменений. exec- Позволяет выполнять произвольные команды оболочки применительно к фиксации.
Пример использования git rebase
Независимо от используемой команды GIT запустит текстовый редактор по умолчанию и откроет файл с подробными сведениями о фиксациях в выбранном диапазоне. Этот файл выглядит примерно так:
pick 1fc6c95 Patch A
pick 6b2481b Patch B
pick dd1475d something I want to split
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before patch 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 оказывает некоторую помощь, сообщая команды, которые доступны при перемещении фиксаций между ветвями.
Дополнительные материалы
- Перемещение изменений из одной ветви в другую в GIT
- Глава "Ветвление Git" из книги Pro Git
- Глава "Интерактивное перемещение изменений из одной ветви в другую" из книги Pro Git
- Уплотнение фиксаций путем перемещения изменений из одной ветви в другую
- Раздел Синхронизация ветви в документации по {% data variables.product.prodname_desktop %}