Как перенести изменения из одной ветки в другую ветку git? - PullRequest
49 голосов
/ 11 ноября 2011

Как я могу переместить свою работу и изменения из ветви master во вновь созданную ветку и оставить основную ветку без изменений после перемещения?

Ответы [ 4 ]

42 голосов
/ 11 ноября 2011

Вы можете создать новую ветку, указывающую на текущий коммит, используя git branch branchname (или git checkout -b branchname, если вы хотите проверить его напрямую). Это в основном будет дублировать вашу основную ветку, поэтому вы сможете продолжить работу там.

Если вы успешно скопировали ветвь, вы можете сбросить master в исходную точку, используя git reset --hard commit, где commit - это хэш коммита, который должен быть последним на мастере.

Например, у вас есть такая ситуация:

---- 1 ---- 2 ---- 3 ---- 4 ---- 5 ---- 6
                   ^                    ^
              original                master
            master commit

Итак, вы отметили master при коммите 6 и хотите создать новую ветку ticket, указывающую на это 6 при сбросе master в 3:

git branch ticket
git reset --hard 3
git checkout ticket

А затем вы на ticket указываете на коммит 6, а master указывает на 3.

27 голосов
/ 18 апреля 2018

Если изменения не зафиксированы.

Вы можете сохранить изменения в основной ветке.

git stash

, затем извлеките ветку

git checkout -b newbranchname

и вставьте изменения здесь

git stash pop

Если изменения зафиксированы:

затем создайте ветвь:

git checkout -b newbranch

возврат обратно в основную ветвь:

git checkout master

сброс к предыдущей фиксации:

git reset --hard head^1
5 голосов
/ 11 ноября 2011

Если вы совершили (скажем) 2 раза после того, как поняли, что должны были быть в ветке, просто выполните

git branch work_branch
git reset --hard HEAD~2

замените 2 на количество коммитов, которые вы хотите вернуть. На этом этапе вы по-прежнему будете мастером, если вы хотите перейти в ветку, чтобы продолжить работу, просто git checkout work_branch

см. git rev-parse --help, если вы хотите понять синтаксис для обхода резервной копии дерева коммитов со ссылками типа HEAD~2

1 голос
/ 18 августа 2017

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

Затем вы можете удалить ветку bad , если вы не перенесли ее в другое место, и в нее были внесены другие изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...