如何更新git checkout分支

时间:2014-06-30 16:46:34

标签: git github

A-->B

我有分支B,它从分支A分支出来。然后,我在分支A中进行了一些更改,但意外地将更改提交到Github上的分支B(远程)。我找到了可以执行git reset --hard <commit_id>git revert的解决方案。

所以这就是我在分支B上所做的:

  1. git revert HEAD
  2. git reset --hard <commit_id>
  3. git checkout A并进行了更正
  4. git push origin A
  5. 然而,我的分支B仍然有错误的提交,我想更新我的分支B,因为它从分支A分支出来。我怎么能这样做?我可以吗

    git pull --rebase origin A 
    

1 个答案:

答案 0 :(得分:2)

最简单的方法是在rebase中指定--onto

我假设您有两个本地分支AB。现在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推送,这可能会使您与之合作的任何人都感到困难。最好让他们知道你在做这件事之前正在做推力!