{"meta":{"title":"О перемещении изменений между ветвями в Git","intro":"Команда git rebase позволяет легко изменить ряд фиксаций, изменив журнал репозитория. Вы можете переупорядочивать, изменять фиксации или выполнять их сжатие.","product":"Начало работы","breadcrumbs":[{"href":"/ru/get-started","title":"Начало работы"},{"href":"/ru/get-started/using-git","title":"С помощью Git"},{"href":"/ru/get-started/using-git/about-git-rebase","title":"О перемещении изменений между ветвями в Git"}],"documentType":"article"},"body":"# О перемещении изменений между ветвями в Git\n\nКоманда git rebase позволяет легко изменить ряд фиксаций, изменив журнал репозитория. Вы можете переупорядочивать, изменять фиксации или выполнять их сжатие.\n\nКак правило, команда `git rebase` используется в следующих целях:\n\n* изменение предыдущих сообщений о фиксациях;\n* объединение нескольких фиксаций в одну;\n* удаление или отмена фиксаций, которые больше не нужны.\n\n> \\[!WARNING]\n> Так как изменение журнала фиксации может затруднить все остальные пользователи, использующие репозиторий, рекомендуется перебазировать фиксации при отправке в репозиторий. Сведения о том, как безопасно перебазировать, см. в разделе [Слияние запросов на вытягивание](/ru/pull-requests/reference/pull-request-merges).\n\n## Перемещение фиксаций между ветвями\n\nЧтобы перебазировать все коммиты между другой ветвью и текущим состоянием ветки, вы можете ввести следующую команду в оболочке (либо в командной строке Windows, либо в терминале для Mac и Linux):\n\n```shell\ngit rebase --interactive OTHER-BRANCH-NAME\n```\n\n## Перемещение фиксаций на момент времени\n\nЧтобы переместить последние несколько фиксаций в текущей ветви, в оболочке можно ввести следующую команду:\n\n```shell\ngit rebase --interactive HEAD~7\n```\n\n## Команды, доступные при перемещении изменений между ветвями\n\nПри перемещении изменений между ветвями доступны шесть команд.\n\n<dl>\n<dt><code>pick</code></dt>\n<dd>\n<code>pick</code> просто означает, что фиксация включается. Изменение порядка команд <code>pick</code> изменяет порядок фиксаций при перемещении изменений из одной ветви в другую. Если вы решили не включать фиксацию, удалите всю строку. </dd>\n\n<dt><code>reword</code></dt>\n<dd>Команда <code>reword</code> аналогична команде <code>pick</code>, но после ее использования процесс перемещения изменений из одной ветви в другую приостанавливается, что дает возможность изменить сообщение о фиксации. Любые изменения, внесенные фиксацией, не затрагиваются. </dd>\n\n<dt><code>edit</code></dt>\n<dd>Если вы решили применить к фиксации команду <code>edit</code>, то получите возможность добавить фиксацию или изменить ее полностью. Вы также можете создать дополнительные фиксации, прежде чем продолжать перемещение изменений из одной ветви в другую. Это позволяет разделить большую фиксацию на меньшие или удалить ошибочные изменения, внесенные в фиксации. </dd>\n\n<dt><code>squash</code></dt>\n<dd>Эта команда позволяет объединить две или более фиксаций в одну. Фиксация вносится в вышестоящую. GIT дает возможность написать новое сообщение о фиксации с описанием обоих изменений.</dd>\n\n<dt><code>fixup</code></dt>\n<dd>Эта команда похожа на <code>squash</code>, но сообщение подлежащей слиянию фиксации удаляется. Фиксация просто объединяется с вышестоящей фиксацией, сообщение которой используется для описания обоих изменений.</dd>\n\n<dt><code>exec</code></dt>\n<dd>Позволяет выполнять произвольные команды оболочки применительно к фиксации.</dd>\n</dl>\n\n## Пример использования `git rebase`\n\nНезависимо от используемой команды GIT запустит [текстовый редактор по умолчанию](/ru/get-started/git-basics/associating-text-editors-with-git) и откроет файл с подробными сведениями о фиксациях в выбранном диапазоне. Этот файл выглядит примерно так:\n\n```text\npick 1fc6c95 Patch A\npick 6b2481b Patch B\npick dd1475d something I want to split\npick c619268 A fix for Patch B\npick fa39187 something to add to patch A\npick 4ca2acc i cant' typ goods\npick 7b36971 something to move before patch B\n\n# Rebase 41a72e6..7b36971 onto 41a72e6\n#\n# Commands:\n#  p, pick = use commit\n#  r, reword = use commit, but edit the commit message\n#  e, edit = use commit, but stop for amending\n#  s, squash = use commit, but meld into previous commit\n#  f, fixup = like \"squash\", but discard this commit's log message\n#  x, exec = run command (the rest of the line) using shell\n#\n# If you remove a line here THAT COMMIT WILL BE LOST.\n# However, if you remove everything, the rebase will be aborted.\n#\n```\n\nПоследовательно разобрав эти сведения, можно прийти к следующим выводам:\n\n* Перечислены семь фиксаций, то есть между отправной точкой и текущим состоянием ветви произошло семь изменений.\n* Фиксации, выбранные для перемещения, отсортированы в порядке от самых старых изменений (вверху) до самых новых (внизу).\n* Каждая строка содержит команду (по умолчанию `pick`), SHA фиксации и сообщение о фиксации. Процедура `git rebase` сосредоточена на операциях с этими тремя столбцами. Внесенные изменения *перемещаются* в ваш репозиторий.\n* После завершения фиксаций GIT сообщает диапазон фиксаций, с которыми ведется работа (`41a72e6..7b36971`).\n* Наконец, GIT оказывает некоторую помощь, сообщая команды, которые доступны при перемещении фиксаций между ветвями.\n\n## Дополнительные материалы\n\n* [Перемещений изменений из одной ветви в другую в GIT в командной строке](/ru/get-started/using-git/using-git-rebase-on-the-command-line)\n* [Глава \"Ветвление Git\" из книги *Pro Git*](https://git-scm.com/book/en/v2/Git-Branching-Rebasing)\n* [Глава \"Интерактивное перемещение изменений из одной ветви в другую\" из книги *Pro Git*](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_changing_multiple)\n* [Фиксации скваширования с повторной базой](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)\n* [Синхронизация ветви в GitHub Desktop](/ru/desktop/working-with-your-remote-repository-on-github-or-github-enterprise/syncing-your-branch-in-github-desktop) в GitHub Desktop документации"}