2015-05-18 61 views
3

本地的git回購我有一個非常簡單的遠程的Git倉庫:合併與遠程一個

*---*---(a)---*---(b, HEAD) (master) 

而且我的項目,該項目初始狀態對應的狀態的本地倉庫一直致力於(後一),而且有許多分支:

(a')---*-------------*-----------* (my-master) 
     \___________/___________/__ (my-dev) 
     \______________..._______/ (feature, hotfix branches) 

然而,最初提交本地回購未獲得正確的(即使用Git命令),但通過複製項目文件(因此而得名(一')因爲它對應於與(a)相同的狀態不同於Git的觀點)。現在,我要合併我與遠程回購的局部變化,但也「捆綁」在某種程度上初始提交本地回購的承諾(一)爲了得到如下圖:

*---*---(a)---*-----------------------(b)-- (merge-commit, HEAD) (master) 
      \________________________________/ (my-master) 
        \___________/___________/__ (my-dev) 
        \______________..._______/ (feature, hotfix branches) 

什麼是最合適的如何做到這一點?

+0

添加真正的遠程存儲庫,從中獲取,然後重新綁定所有分支以基於真實的'a'提交。 – poke

+0

剛剛回答了一個連接的問題,希望有所幫助。 http://stackoverflow.com/questions/30245460/move-the-old-git-history-to-a-new-already-created-and-edited-repo/30291006#30291006 –

回答

2

感謝poke評論我發現適合我的目的的解決方案。

# add remote repo and fetch it 
git remote add repo <repo_addr> 
git fetch repo 

# create new branch for rebasing onto 
# here 'a' is hash of the commit (a) 
git checkout a 
git branch my-huge-feature 

# rebasing my-master branch onto my-huge-feature 
git checkout my-master 
git rebase my-huge-feature 

# fast-forwarding my-huge-feature pointer 
git checkout my-huge-feature 
git merge my-master 

經過這些步驟後,我將本地提交歷史記錄集成到遠程回購歷史記錄中(省略了我的巨大功能)。

但是,rebase命令不保存分支歷史記錄,所以遠程倉庫將我的提交存儲在一個分支中。雖然對我來說沒問題,但是如果這個答案會提供保存分支歷史的方法,我將不勝感激。