Git нажать на неправильную ветку

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

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

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

Благодарю вас

Ответ 1

переключитесь на эту ветвь, проверьте, что теги 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

Ответ 2

Самый простой способ - использовать 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

Ответ 3

Немного добавления ярлыка к ответу Dhruva

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