2014-02-19 133 views
1

我有一個master分支和一個es分支。 es已經在本地重構:如何重建Git分支?

git checkout master 
git checkout -b es2 
git cherry-pick A C E D 
git branch -D es 
git checkout master 
git branch -m es2 es 

其中A,C,d和E是在es分支某些選定的提交。

這之後,我不得不強制推:

git push --all -f 

從開始到這一點,沒有人推或回購拉動。

但一切都很順利。當我試圖在另一臺計算機上重新分支分支時出現問題。此用戶有此分支結構:

master - es - dev 

dev只有一個提交(例如X)。這是Git命令的問題的順序:

git checkout master 
git pull 
git branch -f es origin/es 
git checkout dev 
git rebase es 

上次rebase產生大量的衝突與不包括在新es分支提交,但它們都包含在master分支。做一些挖掘後,我們發現,我們可以做的,而不是底墊這個重建結構:

git checkout es 
git checkout -b dev2 
git cherry-pick X 
git branch -D dev 
git checkout es 
git branch -m dev2 dev 

這讓我覺得現在的問題是,「老」 dev分支有一定的參考或鏈接舊的es分支,這就是爲什麼rebase試圖增加到dev分支比X提交。我想知道是否有另一種更清晰的方法來使用戶開發文件夾與存儲庫分支重新同步。

注意:用戶從不更改esmaster,只是dev

回答

2

第一次嘗試做rebase,你需要使用--onto標誌通知Git rebasedev分支到新es分支。使用常規rebase只有在es分支上仍然有原始提交時纔會起作用,因爲這是rebase用作參考點的一個參考點,用於確定如何在es之上重新編寫dev分支。

所以更簡單的方式做你想要的東西會一直

git rebase --onto <new-base> <old-base> <branch> 
git rebase --onto origin/es es dev 

這告訴混帳採取dev分支和重訂其到從origin版本的es,和它說使用本地,es的原始版本作爲參考點來找出在rebase中排除什麼(即,它將採取esdev之間的所有提交,但不包括es本身)。

請注意,如果你已經有了dev分公司簽出,那麼你可以把它出rebase命令:

git rebase --onto origin/es es