A-->B
我有分支B
,它从分支A
分支出来。然后,我在分支A中进行了一些更改,但意外地将更改提交到Github上的分支B(远程)。我找到了可以执行git reset --hard <commit_id>
或git revert
的解决方案。
所以这就是我在分支B上所做的:
git revert HEAD
git reset --hard <commit_id>
git checkout A
并进行了更正git push origin A
然而,我的分支B仍然有错误的提交,我想更新我的分支B,因为它从分支A分支出来。我怎么能这样做?我可以吗
git pull --rebase origin A
答案 0 :(得分:2)
最简单的方法是在rebase中指定--onto
。
我假设您有两个本地分支A
和B
。现在A
拥有您想要的内容,并且您希望更新B
以便它是A
的分支,并且您还想删除一些提交。
处理这些问题的最好朋友是git log
。为了更容易想象正在发生的事情,请使用git log --oneline --graph
。
第一步是找到第一个对分支B唯一的提交。
git checkout B
git log --oneline --graph
查找分支B唯一的第一个提交(即,不是分支A的一部分)并复制其提交ID。为了说明,我将假设提交ID为4b84d26
。
要将分支B
重新绑定到当前版本的分支A
,请执行
git rebase --onto A 4b84d26
其中4b84d26
将是您之前复制的任何提交ID。这应该再次基于B
A
。
接下来,再次执行git log --oneline --graph
并找到指向要返回的提交的提交ID(即,您意外提交的提交)。由于rebase,此提交ID将从之前更改。同样,您应该git revert --hard <commit_id>
并且您的分支B应该具有正确的历史记录。
请注意,在执行此操作时,您正在重写历史记录,因此当您推送时,您必须执行--force
推送,这可能会使您与之合作的任何人都感到困难。最好让他们知道你在做这件事之前正在做推力!