使用git,经过一些'commit'和几次'push'后,我意识到使用了错误的分支!
现在我必须以某种方式删除我在wrong_branch中的更改 并提交并推送right_branch中的更改
最好(也很简单)的方法是什么?
谢谢
答案 0 :(得分:110)
切换到该分支,单独检查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
将错误的分支转换为提交之前的状态,然后再使用{{1让你的提交进入正确的分支。
git cherry-pick
答案 1 :(得分:3)
最简单的方法是使用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
答案 2 :(得分:1)
添加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