在使用git时,经过一些“commit”和一些“push”之后,我意识到我使用了错误的分支!现在,我必须以某种方式删除wrong_branch中的更改,然后提交并推送right_branch中的更改什么是最好的(也是最简单的)方法呢?
wrong_branch
right_branch
wmvff8tz1#
切换到那个分支,分别检查git log和git revert中的提交,然后切换回所需的分支,在那里你可以使用git cherry-pick从git refs中选择特定的提交并将其合并到正确的分支中。
git log
git revert
git cherry-pick
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 reset
git checkout wrong_branch git reset commitsha3 #commit just before commitsha2 git checkout right_branch git cherry-pick commitsha1 git cherry-pick commitsha2
nfg76nw02#
最简单的方法是使用git rebase,假设您有这样的设置:
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
brccelvz3#
在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
0vvn1miw4#
我发现如果正确的分支还没有被创建或者没有任何新的提交,并且是错误分支的直接子分支,那么flow会更容易:
你拥有一切,就好像你一开始就没有犯过任何错误。
4条答案
按热度按时间wmvff8tz1#
切换到那个分支,分别检查
git log
和git revert
中的提交,然后切换回所需的分支,在那里你可以使用git cherry-pick
从git refs中选择特定的提交并将其合并到正确的分支中。如果提交被分组在一起,并且在脏提交之后没有提交被推送,你甚至可以使用
git reset
将错误的分支转移到提交之前的状态,然后再次使用git cherry-pick
将提交转移到正确的分支。nfg76nw02#
最简单的方法是使用
git rebase
,假设您有这样的设置:您希望将更改C3、C4移动到右侧分支。
现在设置为
然后,你必须强制推送结果(如果还没有人与你的远程存储库同步):
brccelvz3#
在Dhruva的回答中加入一点捷径
0vvn1miw4#
我发现如果正确的分支还没有被创建或者没有任何新的提交,并且是错误分支的直接子分支,那么flow会更容易:
你拥有一切,就好像你一开始就没有犯过任何错误。