2014-06-30 78 views
1
A-->B 

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

所以这是我做了分行A:

  1. git revert HEAD
  2. git reset --hard <commit_id>
  3. git checkout A,也做了修正需要
  4. git push origin A

但是我分行A仍然有错误的提交,我想更新我的分支B,因为它从分支A分支出来。我该怎么做?我能做

git pull --rebase origin A 

回答

2

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

我假设你有两个本地分支,AB。现在A有你想要的,并且你想更新B,这样它就是一个关闭A的分支,你也想删除一些提交。

你最好的朋友在处理这些问题是git log。为了便于查看发生了什么,请使用git log --oneline --graph

的第一步是要找到第一次提交所独有的分支B.

git checkout B 
git log --oneline --graph 

找到的第一个承诺所特有的分支B(即,是不是一个分支的一部分)和复制其提交ID。为了说明,我将假定提交ID为4b84d26

衍合分支B到分行A的当前版本,做

git rebase --onto A 4b84d26 

其中4b84d26会犯什么你之前复制ID。这应该基于A再次生成B

接下来,再次执行git log --oneline --graph并找到指向您想要返回的提交(即意外提交的提交)的提交ID。由于rebase,此提交ID将从之前更改。再次,你应该做git revert --hard <commit_id>和你的分支B应该有正确的历史。

请注意,在此过程中,您正在重写历史记录,因此当您推送时,您必须执行--force推送,这可能会让您与之合作的任何人都感到困难。最好让他们知道你在做这件事之前正在进行推力!