Как отменить коммиты на мастере и переместить их в ветку - PullRequest
2 голосов
/ 12 марта 2012

У меня проблема.Я сделал пару коммитов на мастере.Но я ошибся.Мне нужно сделать эти коммиты на branch_a.Как я могу отменить коммиты на master и переместить их в branch_a.

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Если у вас просто есть пара коммитов, то вишня, выбирая их, может быть самым простым вариантом. Вы можете найти хеши коммитов через git log master. Затем сделайте следующее.

git checkout branch_a
git cherry-pick COMMIT_HASH_1
git cherry-pick COMMIT_HASH_2
...
git checkout master
git reset --hard COMMIT_HASH_BEFORE

Где все COMMIT_HASH_# - это коммиты, которые вы хотите переместить на branch_a, а COMMIT_HASH_BEFORE - это хэш коммитов до ваших ошибочных коммитов. (Обратите внимание, что это исключит любые незафиксированные изменения в вашем рабочем каталоге.)

Обратите внимание, что если вы уже отправили изменения в master, и другие люди могли работать с веткой, вместо этого вы захотите git revert те же самые коммиты, которые вы выбрали, иначе вы вызовете проблемы для другие работают на ветке. (Revert просто создает новый коммит, который отменяет предыдущий коммит.)

2 голосов
/ 12 марта 2012

Предполагая, что никто другой уже не видел ваши изменения в мастере и построил что-то поверх них:

git checkout branch_a
git cherry-pick <commit sha>   # for each commit you want on branch a
git checkout master
git reset <commit sha you want to move master back to>

Если у кого-то уже есть уже созданных вещей поверх ваших случайных коммитовтогда вы захотите git revert использовать их вместо использования reset.

1 голос
/ 12 марта 2012

Самое лучшее, что я имею, это сбросить ветку master, но сохранить ваши изменения.Использование cherry-pick испортит репо новыми коммитами.Предполагая, что вы сделали два коммита:

git checkout master
git reset --soft HEAD~2
git checkout branch_a
git commit -m "foo"

Сброс с помощью --soft означает, что ваши изменения будут храниться поэтапно, и он переведет git в состояние, которое выглядело до того, как вы сделали коммиты, так что вам нужно толькопереключите ветку и подтвердите изменения.

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