2015-10-19 139 views
1

我在遠程repo上有兩個分支 - master和development。爲什麼git checkout創建一個跟蹤遠程分支的分支?

現在,在克隆存儲庫之後,我只在名爲master的唯一本地分支上。在git checkout development之後,這是我得到的消息:

分支機構開發設置爲跟蹤遠程分支機構從原點開發。 切換到一個新的分支「發展」

究竟是怎麼回事?我沒有指定-b標誌來創建一個新的本地分支。如果我做git checkout adasdasd而不是,我得到error: pathspec 'asdasdasd' did not match any file(s) known to git.,這是有道理的。但它只是一些默認的git行爲(如果在checkout中指定的名稱與遠程分支相匹配,則創建本地分支)?

總之它看起來像git checkout development,第一次運行,實際上執行git checkout -b development origin/development

+1

爲什麼你會想要一個與遠程分支名稱相同的本地分支,但*不*跟蹤遠程分支?當你使用像git這樣的版本控制系統時,已經有很多混亂的可能,爲什麼要創建更多? – Caleb

+0

@Caleb,因爲遠程分支被稱爲「開發」 - 它可能很難避免使用的名稱?請記住,可能有幾百個分支機構在幾個有其他人想要在本地使用的名稱的遙控器上。 – jwg

回答

0

這只是表示您克隆的存儲庫在遠程(GitHub)上有development分支。

當你克隆它時,所有的遠程分支也被克隆了。這就是爲什麼git checkout development工作(切換到development分支)。

如果你發現這個意外,可以從遠程刪除:

git push origin --delete development 

要推一個分支上的遠程DO(你可能這樣做,當你推GitHub上的分支):

git push origin development 
# or 
git push --all # this will push all your branches 
+0

但是,當我再次執行'git checkout master'和'git checkout development'時,我這次得到的消息是'Switched to branch development'。所以它不只是切換到現有的分支,對吧?總之,它看起來像'git checkout development',第一次運行,實際上執行'git checkout -b開發源/開發'。 – user4205580

2

是的,如果您簽出一個作爲遠程存在的分支,它假定您想創建一個跟蹤遠程分支的分支。

從文檔:

如果沒有找到,但這裏的確在只有一個遠程(稱之爲<遠程>)具有匹配名稱,當作等價物存在的跟蹤分支

$ git checkout -b <branch> --track <remote>/<branch> 

這在很多時候顯然非常有用 - 這通常是人們想要做的。如果您希望您的分支基於您當前的分支,而不是具有相同名稱的遠程跟蹤分支,或者如果存在名稱衝突,那麼它很煩人。如果你做git checkout -b foo這不會發生。請注意,如果您尚未擁有名爲foo的分支,則無論如何這都是您想要的。

相關問題