Skip to main content

Перемещений изменений из одной ветви в другую в GIT в командной строке

Вот краткое руководство по использованию git rebase в командной строке.

Перемещение изменений из одной ветви в другую в 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, останавливается и выводит следующее сообщение в терминале:

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 работать не будет. Вам потребуется изменить команду путем принудительной отправки последних изменений:

# Don't override changes
$ git push origin main --force-with-lease

# Override changes
$ git push origin main --force

Предупреждение

Принудительная отправка имеет серьезные последствия, так как она приводит к изменению исторической последовательности фиксаций для ветви. Используйте ее с осторожностью, особенно если к репозиторию имеет доступ множество пользователей.

Дополнительные материалы

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy