Git推到错误的分支

使用git,经过一些“提交”和一些“推送”,我意识到正在使用错误的分支!

现在我必须以某种方式删除wrong_branch中的更改,并提交并推送right_branch中的更改

什么是最好的(和简单的)的方式来做到这一点?

谢谢

切换到该分支,检查git loggit revert单独git revert这些提交。 一旦你完成了,切换回所需的分支,然后你可以使用git cherry-pick从git refs中select特定的提交并将其合并到右边的分支中。

 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 

最简单的方法是使用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 

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