Git推送到错误的分支

kiz8lqtg  于 2022-12-25  发布在  Git
关注(0)|答案(4)|浏览(266)

在使用git时,经过一些“commit”和一些“push”之后,我意识到我使用了错误的分支!
现在,我必须以某种方式删除wrong_branch中的更改,然后提交并推送right_branch中的更改
什么是最好的(也是最简单的)方法呢?

wmvff8tz

wmvff8tz1#

切换到那个分支,分别检查git loggit revert中的提交,然后切换回所需的分支,在那里你可以使用git cherry-pick从git refs中选择特定的提交并将其合并到正确的分支中。

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
nfg76nw0

nfg76nw02#

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

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
0vvn1miw

0vvn1miw4#

我发现如果正确的分支还没有被创建或者没有任何新的提交,并且是错误分支的直接子分支,那么flow会更容易:

  • 如果右分支已经存在,则首先删除右分支,
  • git检出右分支
  • git推送右分支
  • git检出错误分支
  • git revert commitsha 2(或错误提交之前的提交)
  • 错误分支上的git push -f

你拥有一切,就好像你一开始就没有犯过任何错误。

相关问题