2017-07-18 39 views
4

直到最近,我還沒有意識到--track切換爲git branch。我閱讀文檔並嘗試了這個命令,但它對我來說沒有意義。何時使用git branch --track(開始「看上游」的含義)?

--track

當創建一個新的分支,建立branch.<name>.remotebranch.<name>.merge配置條目來標記起始點 分支作爲從新的支路「上游」。此配置將告訴 git顯示git status 和git branch -v中兩個分支之間的關係。此外,它指示git pull沒有參數 從新的分支簽出時從上游拉。

當起始點是遠程跟蹤 分支時,此行爲是缺省值。如果您希望git checkoutgit branch的行爲始終如同 - 沒有給出軌道,請將branch.autoSetupMerge配置變量設置爲false 。如果您想在起點爲本地或遠程跟蹤分支時想要這種行爲,請將其設置爲always

我可以看到人們使用這個開關時,他們要使分支軌道上游分支

是什麼意思?是我還是這個開關描述很混亂。當我使用術語upstream時,我指的是我可以推送更改的另一個遠程回購(叉)。

當我開始跟蹤遠程分支時會發生什麼?它如何在本地顯示?

回答

4

一種上游分支分支的,或跟蹤遠程分支僅僅是默認情況下將使用git pullgit push命令時與之交互的分支。

當拉一個分支到你的,你可以明確地做到這一點:

git pull origin the_branch 

,將取回遠程origin然後合併origin/the_branch到當前的分支。

如果使用總是拉同一分支,通過設置上游分支,你可以啓動git pull

git branch --set-upstream-to origin/the_branch 
git pull 

默認情況下,當你開始從遠程一個新的分支,git會增加它作爲上游分支:

git checkout -b origin/the_branch 
# Is equivalent to 
git branch --track the_branch origin/the_branch 
git checkout the_branch 

推時,它幾乎同樣的事情。
配置push.default將確定在使用不帶參數的git push時要推送到的默認分支。

隨着值upstream,它將簡單地推入上游分支。
使用默認值simple,它將執行相同的,但前提是本地和上游分支名稱相同
我讓你看看文檔來檢查其他配置的可能性。

$ git branch -vv 
* my_branch  33f2d4c [origin/mybranch] a useful commit 
    master   3ed8e99 [origin/master] Merge 
    the_branch  dbbb8c0 [origin/the_branch] commit on the branch 

一個分支的上游分支也可以與@{upstream}參考被稱爲:


可以通過使用-vv開關看到所有的分支的電流上游分支

$ git rev-parse --symbolic-full-name --abbrev-ref @{upstream} 
origin/the_branch 

推送分支作爲等價的@{push}(它將與99%的使用cas中的@{upstream}相同ES):

$ git rev-parse --symbolic-full-name --abbrev-ref @{push} 
origin/the_branch 

@{upstream}@{push}之間的區別是,當你使用一個三角形的工作流程的情況:您從只讀「上游」項目(通常是遠程按照慣例upstream叫拉),推一個可寫入的存儲庫。
這是在GitHub上使用分叉工作流的情況。
我發了一篇關於此的(法語)博客文章,here is the auto-translated version

+0

你解決了懷疑與'默認情況下,當你從遠程啓動一個新的分支時,git會將它添加爲上游分支:'。這就是爲什麼我看不出差異,因爲每次我在某個分支時,我都會通過'git pull'刷新它,而不必指定分支名稱。我知道,如果我從檢查出來的分支中拉出/推送,Git會從遠端拉出那個分支。 – sandalone

0

設置本地分支以跟蹤遠程分支,以便將您在本地執行的操作與遠程執行的操作相關聯。

也就是說,當你做git pullgit fetch時,git會知道在哪裏尋找變化。如果其他人向遠程分支推送了一些提交,並且您做了git status它會告訴你,你是在遠程後面的一些提交。或者,如果你在本地進行了一些提交,它會告訴你,你有一些提交遠程的提交。

git status輸出示例:

On branch develop 
Your branch is behind 'origin/develop' by 19 commits, and can be fast-forwarded. 
    (use "git pull" to update your local branch) 

正如你可以看到在同一分支與更多的人一起工作時是非常有用的,因爲你總是可以知道他們在做什麼,並保持自己的作品,以日期。