2014-06-30 121 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推送,這可能會讓您與之合作的任何人都感到困難。最好讓他們知道你在做這件事之前正在進行推力!