2012-08-22 40 views
2

(有很多在這個類似的問題,而且我還通過各種文檔閱讀,但我找不到任何回答這個具體問題。)Git的 - 將所有提交到另一個分支,創建新的主

由於沒有遙控器和無分支的資源庫,對主20個提交。

意圖是結束空的主,和所有提交的開發,但沒有一個凌亂的歷史。

有沒有之間的差異:

git branch --move master develop 
git checkout --orphan master 

和:

git checkout -b develop 
git merge master 
git checkout master 
git reset --hard HEAD^20 

第一個選項似乎是最簡單的方法,但我沒有在任何地方看到它 - 我一直在閱讀的所有各種東西都傾向於使用第二種選擇的變體(或重新鑲嵌,我認爲這裏適用)。

做的第一選擇做什麼,我想這樣做,並與第二個選項它有什麼好處/缺點?

是否有其他更好的方法來實現這一點?

+1

我想你找到的第二個序列的原因是'git的結帳--orphan ''是'git'的一個相對較新的增加,部分是爲了解決這種情況。第二個序列部分工作(如布雷克答案中所述),但不足以實現目標。 – twalberg

+1

感謝您的信息 - 它確實足夠新,我需要升級Git,因爲它在嘗試完成時只是說'錯誤:未知選項'orphan'。 :) –

回答

3

分支只是提交指針。當沒有什麼東西可以指向時,你會進入一些奇怪的領域。老實說,如果你只是希望得到一個「乾淨」的工作流的歷史,所以第一次提交任何意義的是develop合併爲master,添加一個微不足道的承諾master第一:

git branch --move master develop 
git checkout --orphan master 
git rm -rf . ;# abandon the staged, orphaned changes 
echo README > README ;# put something in this working directory 
git add README && git commit -m "Initial commit of <my_project>" 

爲什麼犯些什麼呢?因爲一旦您運行--orphan結賬,您將無法對master分行執行任何有意義的操作。嘗試一下:

$ git checkout --orphan master 
Switched to a new branch 'master' 
$ git checkout develop && git checkout master 
error: pathspec 'master' did not match any file(s) known to git. 

如何合併?

$ git checkout --orphan master 
Switched to a new branch 'master' 
$ git merge develop 
fatal: Non-fast-forward commit does not make sense into an empty head 

沒有骰子。解決這個問題的唯一方法就是向某個空分支提交一些東西,任何東西。你做的那一刻,您可以合併develop任何你想要的方式:

$ git merge develop 
Merge made by the 'recursive' strategy. 
README | 1 + 
1 file changed, 1 insertion(+) 
create mode 100644 README 

和日誌:

$ git log --graph --oneline 
* 867a1f9 Merge branch 'develop' 
|\ 
| * 22df145 README 
* 15ba82a Initial commit of test project 
+0

謝謝克里斯託弗,這一切都有道理。對主人進行一次新的提交就沒有問題了(我的其他項目也一致)。 –

0

我看到的唯一問題是,第二個版本將無法正常工作。 HEAD^20不會解析爲只有20次提交的歷史記錄,因此git reset --hard HEAD^20將失敗。

你最初的版本應該可以正常工作。如果第二個版本有效,我不會看到兩者之間存在顯着差異。

相關問題