在使用git时,经过一些'commit'和几次'push'之后,我意识到我正在使用错误的分支!现在我必须以某种方式删除在'wrong_branch'中的更改,并将更改提交并推送到'right_branch'中。有什么最好(又简单)的方法可以做到这一点?
切换到该分支,检查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
git cherry-pick commitsha1 commitsha2
。 - ThomasWgit rebase
。假设您有以下设置:A -- B -- C -- C1 -- C2 # right branch
\
\-- D -- C3 -- C4 # wrong branch
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
git push -f
,最好使用 git push --force-with-lease
。这样可以确保只有在没有其他人在你的提交之上推送其他提交时,远程引用才会被更新。 - Pierre-Olivier Varesgit 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
如果正确的分支尚未创建或没有新提交并且是错误分支的直接子级,我发现这更容易:
这样,您就可以像从未犯过任何错误提交一样拥有所有内容。