2011-11-27 97 views
6

我有一個Git倉庫有兩個分支:masterredesign。該redesign分支從master創建的,master還未觸碰從那時起:從現有的本地分支創建一個新的git存儲庫

master 
...|--m50--\ 
      \--m51--|--m52--|--m53-- redesign 

redesign分公司已經發展這麼多,我想從它創建一個新的整體存儲庫,以第一次提交的redesign作爲初始提交新的存儲庫,並從不忘繼承master以前的歷史:

master 
...|--m50-- 

redesign 
--r1--|--r2--|--r3-- 

這是可能的Git的?這裏有一個related question,但它的目標是使用一個目錄,而不是一個分支。

謝謝!

回答

7

,你可以:

  • 結賬提交您想爲您的新的回購協議的「根」
  • 的所有文件複製到新目錄(除了.git目錄)
  • 檢查出你redesign分支
  • git format-patch master..redesign
  • 將所有生成的補丁文件的地方方便

然後到新的目錄和:

$ git init 
$ git add .   # make sure your .gitignore is in place though 
$ git commit -m"..." 
$ git am /path/to/patches/*.patch 
+0

當執行'git am的創作......出現了幾個這樣的錯誤消息:'/Users/elitalon/Sites/exigo/.git/rebase-apply/patch:447:尾隨空白'和'錯誤:cake/console/cake.bat:patch not apply'。會發生什麼? – elitalon

+0

使用一個單獨的目錄,您只存儲* git format-patch生成的補丁文件。你想要應用的東西看起來不像你應該應用的任何東西。 – Mat

+0

忘記它。我使用了'--whitespace = fix'這個標誌,所有的東西都像魅力一樣。謝謝! – elitalon

1

首先,複製或克隆你的Git倉庫。

然後,找出新的根提交的散列(您的圖中爲m51)。將其提交哈希放入文件.git/info/grafts,然後運行git filter-branch --all。驗證成功操作後,您可以刪除original/*備份參考(或重新克隆存儲庫)。

請注意,這將爲所有提交創建新的提交散列,因此您必須小心已發佈的歷史記錄。

0

創建新的存儲庫,然後:

$ git add remote newrepo <path to newrepo> 
$ git checkout redesign 
$ git checkout --orphan clean 
# The branch is empty, but the files from the original branch are staged for commit. 
$ git commit -m"clean" 
$ git push newrepo clean:master 

注意:如果要保留歷史記錄(或不關心),省略的「乾淨」

相關問題