Git толчок к неправильной ветви - PullRequest
86 голосов
/ 24 июня 2011

Работая с git, после некоторого 'commit' и пары 'push', я понял, что использую неправильную ветку!

Теперь я должен каким-то образом удалить свои изменения в неправильной ветке и зафиксировать и отправить изменения в right_branch

Какой лучший (и простой) способ сделать это?

спасибо

Ответы [ 3 ]

115 голосов
/ 24 июня 2011

переключитесь на эту ветку, проверьте git log и git revert эти коммиты индивидуально. После того, как вы это сделаете, переключитесь обратно на нужную ветку, и там вы сможете использовать git cherry-pick, чтобы выбрать конкретные коммиты из ссылок git и объединить их в нужную ветку.

git checkout wrong_branch
git revert commitsha1
git revert commitsha2
git checkout right_branch
git cherry-pick commitsha1
git cherry-pick commitsha2

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

git checkout wrong_branch
git reset commitsha3 #commit just before commitsha2
git checkout right_branch
git cherry-pick commitsha1
git cherry-pick commitsha2
3 голосов
/ 24 июня 2011

Самый простой способ - использовать git rebase. Предположим, что у вас есть этот параметр:

A -- B -- C -- C1 -- C2 # right branch
          \
           \-- D -- C3 -- C4 # wrong branch

Вы хотите переместить изменение C3, C4 в правую ветвь.

git checkout -b new_wrong_branch D
git checkout wrong_branch
git rebase D --onto right_branch
git checkout right_branch
git merge right_branch wrong_branch
git branch -d wrong_branch
git branch rename new_wrong_branch wrong_branch

Теперь настройка

A -- B -- C -- C1 -- C2 -- C3 -- C4 # right_branch
          \
           \ -- D # wrong_branch

Затем вы должны принудительно публиковать результаты (ЕСЛИ никто еще не синхронизировался с вашим удаленным репо):

git push -f remote:right_branch
1 голос
/ 03 августа 2016

Небольшое добавление ярлыка к ответу Друвы

git checkout wrong_branch
git revert commitsha1

git checkout right_branch
git push right_branch

git checkout wrong_branch
git reset commitsha2 #commit just before commitsha1
git push wrong_branch -f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...