Поиск по сайту:

Как перенести изменения в другую ветку в Git


В то время как Git отслеживает ваши повседневные изменения, он также имеет такие системы, как ветки, которые помогают вам организовать. Однако, если вы не будете осторожны, вы можете столкнуться с такими проблемами, как коммиты и изменения, внесенные в неправильную ветку, которые может быть трудно решить без правильных команд.

Перемещение изменений (если вы еще не зафиксировали)

Git следит за всей вашей папкой, но изменения, которые вы вносите в файлы , не привязаны к конкретной ветке, пока вы их не зафиксируете. Вы можете перемещать ветки и переносить эти изменения вместе с вами.

Самый простой вариант — просто переключить ветки, но это сработает только в том случае, если две ветки, на которые вы нацеливаетесь имеют совпадающую историю:

git checkout feature

Вы можете обойти это несколькими способами. Во-первых, создав новую ветку, а затем объединив расходящиеся истории:

git checkout -b tempfeature

git checkout feature

git merge tempfeature

Вы также можете использовать git stash, чтобы сохранить изменения на потом и повторно применить их в новой ветке:

git stash
git switch feature
git stash apply

Перемещение коммитов (если вы уже сделали коммит)

Если вы уже совершили коммит, не волнуйтесь — вы всегда можете выполнить программный сброс, поэтому коммиты не являются окончательными, пока не будут переданы в удаленный контроль версий. Если вы уже сделали это, вы все еще можете исправить проблему, но запись о вашей ошибке останется в вашей истории Git, поэтому лучше сделать это локально, прежде чем ваши коллеги увидят ее.

Чтобы отменить коммит, вы можете просто выполнить программный сброс, обычно просто отменив последний сделанный коммит, но вы также можете передать ссылку на идентификатор коммита:

git reset HEAD~1

Это оставит вас в состоянии «еще не зафиксировано», после чего вы можете использовать описанные выше методы для решения проблемы.

В качестве альтернативы вы можете использовать git cherry-pick. Эта команда копирует коммиты из одной ветки в другую, и это хороший способ выбрать коммиты и аккуратно переместить их в новые ветки.

Запустите git log , чтобы найти идентификатор коммита, который вы хотите отменить:

git log

Затем извлеките ветвь функции, предполагая, что ваши изменения были зафиксированы, и запустите cherry-pick:

git switch feature

git cherry-pick

После этого в основной ветке все равно будет дубликат коммита. Вы можете сбросить это и отменить изменения, если функциональная ветвь находится в правильном порядке, или оставить ее и позволить Git разобраться с ней после слияния.