2011-08-24 48 views
1

一開始,我只有主人分支。爲什麼我可以簽出已刪除的Git分支,爲什麼它仍然可以在GitHub上使用?

然後,我創建一個新的分支使用下面的命令:

git branch 'branch1' 

然後,我添加一些文件到BRANCH1並將其合併到主。然後執行以下命令刪除分支1

git branch -d branch1 

然後在本地,我現在只能看到主分支。但在GitHub上,我仍然可以在分支列表中看到branch1。

雖然我刪除了它,但我仍然可以檢出branch1。

爲什麼?

+0

你足夠長的時間能夠學習問題標題應該是什麼樣子......「關於Git分支的問題」不是一個好的標題(因爲它沒有提及內容)。 (我將你的標題編輯爲我認爲你的問題所關心的問題,請隨時再次編輯。) –

+0

感謝Paulo ... – smwikipedia

回答

1

Git中的分支只是指向提交樹的指針(引用),並且每個存儲庫都有自己的一組引用。如果「branch1」出現在GitHub上,它意味着GitHub上有一個名爲「branch1」的引用,它指向您的樹(在GitHub上)(它甚至需要指向同一提交)。

3

這是因爲您將分支推送到github,並且git branch -d BRANCHNAME只在本地刪除分支,而github指針保持不變。如果你想在github上刪除它,你也可以做git push origin :BRANCHNAME(注意冒號,同時這也假定「origin」是你的github repo,afaik是默認設置)

有關更多信息,請參閱this命令。

3

如果你使用這個庫GitHub的唯一的人,你必須在某些時候被推branch1它,可能與git push origin branch1或類似的東西。

正如Alexander says你可以從GitHub與刪除分支branch1

git push origin :branch1 

...但隨後刪除遠程跟蹤分支origin/branch1你應該做的:

git remote prune origin 

有趣的事這裏是你可以結帳branch1,推測是:

git checkout branch1 

...即使您刪除了本地分支。事實證明,這是因爲,從v1.6.6開始,git會試圖猜測你試圖檢出一個不存在的分支時的意思,但是隻有一個具有匹配名稱的遠程跟蹤分支存在。這是一個在this commit由git的維護者,JUNIOÇ濱野介紹:

DWIM 「混帳簽出了frotz」,以 「混帳結賬-b了frotz產地/了frotz」

當 '了frotz' 不是一個有效的對象名而不是跟蹤的文件名, 我們曾經抱怨並且失敗了這個命令。當只有一個具有'frotz'作爲其追蹤分支的遠程設備時,我們可以將 DWIM作爲創建本地分支'frotz'的請求,從 分配匹配的遠程追蹤分支。

這對我來說有點意外,git checkout手冊頁中沒有提及。

+0

看起來我們學習的過程似乎是我們適應它的過程。更好或更差。 – smwikipedia

相關問題