2011-06-06 80 views
0

假設我們從一個全新的設置開始。爲什麼我的新Git分支不是空的?

touch somefile 
git init . 
git add . 
git commit -m "initial commit" 
git branch dev 
git checkout dev 

git status後,我得到

nothing to commit (working directory clean) 

git merge master後,我得到

Already up-to-date. 

這是爲什麼?我認爲直到我們直接添加內容或從現有分支合併爲止,新分支開始清理(並清空)。

回答

4

Git中的分支只不過是指向提交的指針。當您像創建分支一樣創建分支時,它將指向與其他分支相同的提交。一旦你犯了什麼後,你會看到他們不同。大多數其他版本控制系統不支持這種基於快照的方法。

因此,當您發出合併命令時,它沒有任何合併,因爲您當前的分支已包含其他分支的所有提交。

我強烈建議閱讀progit.org/book並充分理解歷史結構遵循的DAG(有向無環圖)。

希望這會有所幫助。

+0

非常有意義。謝謝。 – JAM 2011-06-06 04:44:02

0

新的分支dev將與master分支的狀態下創建的,所以沒有什麼合併到dev分支,直到你COMMITED更改master(dev的分支已初步建立後)。

+1

分支沒有狀態,它們是提交的引用(指針)。這是什麼使他們如此輕的重量。 – 2011-06-06 04:45:09

+0

並非試圖提供技術細節,只是使用有用的語言來描述創建的分支 – mportiz08 2011-06-07 01:55:22

-2

一個新的分支沒有開始「新鮮和乾淨」(它是什麼意思?)它包含分支點處原始分支中的所有文件。

+0

分支不包含任何內容。提交包含樹。分支只是指向一個提交。 – 2011-06-06 04:38:13

0

git中的分支是指針,但如果您希望他們使用孤兒,他們可以以某種方式說出來爲空。一旦你創建了孤立分支,檢查狀態,你會看到樹被認爲是新的,並等待添加。刪除它,你有乾淨的分支。

mkdir foo 
cd foo 
touch somefile 
git init . 
git add . 
git commit -m "initial commit" 
git checkout --orphan dev 
rm -rf . 

這隻適用於git 1.7.2或更高版本。

相關問題