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