1
0
mirror of synced 2026-01-02 12:04:38 -05:00
Files
docs/translations/ru-RU/content/get-started/using-git/using-git-rebase-on-the-command-line.md
2022-11-16 21:42:42 +00:00

155 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Перемещений изменений из одной ветви в другую в GIT в командной строке
redirect_from:
- /articles/using-git-rebase
- /articles/using-git-rebase-on-the-command-line
- /github/using-git/using-git-rebase-on-the-command-line
- /github/getting-started-with-github/using-git-rebase-on-the-command-line
- /github/getting-started-with-github/using-git/using-git-rebase-on-the-command-line
intro: Вот краткое руководство по использованию `git rebase` в командной строке.
versions:
fpt: '*'
ghes: '*'
ghae: '*'
ghec: '*'
shortTitle: Git rebase
ms.openlocfilehash: e0d2d2d10da187d6cc38a72a44e8235ec1f6f73f
ms.sourcegitcommit: fb047f9450b41b24afc43d9512a5db2a2b750a2a
ms.translationtype: HT
ms.contentlocale: ru-RU
ms.lasthandoff: 09/11/2022
ms.locfileid: '145134654'
---
## Перемещение изменений из одной ветви в другую в GIT
В этом примере будут рассмотрены все доступные команды `git rebase`, кроме `exec`.
Мы начнем перемещение изменений из одной ветви в другую с ввода `git rebase --interactive HEAD~7` в терминале. В выбранном текстовом редакторе отобразятся следующие строки:
```
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
```
В этом примере будут выполнены следующие действия:
* сжатие пятой фиксации (`fa39187`) с фиксацией `"Patch A"` (`1fc6c95`) с помощью команды `squash`;
* перемещение последней фиксации (`7b36971`) вверх в положение перед фиксацией `"Patch B"` (`6b2481b`) и сохранение ее как `pick`;
* слияние фиксации `"A fix for Patch B"` (`c619268`) с фиксацией `"Patch B"` (`6b2481b`) и игнорирование сообщения о фиксации с помощью команды `fixup`;
* разделение третьей фиксации (`dd1475d`) на две фиксации меньшего размера с помощью команды `edit`;
* исправление сообщения о фиксации с орфографической ошибкой (`4ca2acc`) с помощью команды `reword`.
Наконец-то. Похоже, предстоит потрудиться, но, действуя последовательно, мы сможем легко внести все эти изменения.
Для начала нам потребуется изменить команды в файле, чтобы они выглядели следующим образом:
```
pick 1fc6c95 Patch A
squash fa39187 something to add to patch A
pick 7b36971 something to move before patch B
pick 6b2481b Patch B
fixup c619268 A fix for Patch B
edit dd1475d something I want to split
reword 4ca2acc i cant' typ goods
```
Мы изменили команду `pick` в каждой строке на интересующую нас команду.
Теперь сохраните и закройте редактор Будет запущено интерактивной перемещение изменения из одной ветви в другую.
GIT пропускает первую команду перемещения изменений, `pick 1fc6c95`, так как она не нужна, и переходит к следующей команде: `squash fa39187`. Так как для этой операции требуются входные данные, GIT снова открывает текстовый редактор. Открываемый файл выглядит примерно так:
```
# This is a combination of two commits.
# The first commit's message is:
Patch A
# This is the 2nd commit message:
something to add to patch A
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: a
#
```
Посредством этого файла GIT сообщает, что произойдет в результате данной операции `squash`. В нем указывается первое сообщение о фиксации (`"Patch A"`) и второе сообщение (`"something to add to patch A"`). Если эти сообщения о фиксациях вас устраивают, вы можете сохранить файл и закрыть редактор. В противном случае можно изменить сообщение фиксации, просто изменив текст.
После закрытия редактора перемещение изменений из одной ветви в другую продолжается:
```
pick 1fc6c95 Patch A
squash fa39187 something to add to patch A
pick 7b36971 something to move before patch B
pick 6b2481b Patch B
fixup c619268 A fix for Patch B
edit dd1475d something I want to split
reword 4ca2acc i cant' typ goods
```
GIT обрабатывает две команды `pick` (для `pick 7b36971` и `pick 6b2481b`). *Также* обрабатывается команда `fixup` (`fixup c619268`), так как она не требует взаимодействия. Команда `fixup` объединяет изменения из `c619268` с предыдущей фиксацией (`6b2481b`). Оба изменения будут иметь одно и то же сообщение о фиксации: `"Patch B"`.
GIT достигает операции `edit dd1475d`, останавливается и выводит следующее сообщение в терминале:
```shell
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
```
На этом этапе можно внести дополнительные изменения в любой из файлов проекта. Для каждого вносимого изменения необходимо выполнить новую фиксацию, и это можно сделать с помощью команды `git commit --amend`. Завершив внесение всех изменений, можно выполнить `git rebase --continue`.
После этого GIT переходит к команде `reword 4ca2acc`. Снова открывается текстовый редактор, и выводятся следующие сведения:
```
i cant' typ goods
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD^1 <file>..." to unstage)
#
# modified: a
#
```
Как и ранее, GIT отображает сообщение о фиксации для редактирования. Вы можете изменить текст (`"i cant' typ goods"`), сохранить файл и закрыть редактор. GIT завершит перемещение изменений из одной ветви в другую, и вы вернетесь в терминал.
## Отправка перемещенного между ветвями кода на GitHub
Так как вы изменили журнал GIT, стандартная команда `git push origin` работать **не будет**. Вам потребуется изменить команду путем принудительной отправки последних изменений:
```shell
# Don't override changes
$ git push origin main --force-with-lease
# Override changes
$ git push origin main --force
```
{% warning %}
Принудительная отправка имеет серьезные последствия, так как она приводит к изменению исторической последовательности фиксаций для ветви. Используйте ее с осторожностью, особенно если к репозиторию имеет доступ множество пользователей.
{% endwarning %}
## Дополнительные материалы
* [Разрешение конфликтов слияния после перемещения изменений из одной ветви в другую в GIT](/github/getting-started-with-github/resolving-merge-conflicts-after-a-git-rebase)