2014-01-16 24 views
1

我通過git fetch origin name-of-branch:refs/remotes/name-of-branch獲取遠程分支。我使用git checkout name-of-branch我處於分離狀態。我現在可以通過使用git checkout -b some-branch-name來到一個命名分支。有沒有辦法在一個命令中檢查遠程分支到一個命名分支(甚至是同名的)?抓取並簽出遠程分支,不用分離頭

如果我使用git checkout -b name-of-remote-branch(即使用相同的名稱),然後結帳另一個分支,然後再次進行檢查分支git checkout name-of-remote-branch,我得到

warning: refname 'name-of-remote-branch' is ambiguous. 

然而,這並沒有,如果我使用git pull第一發生然後用結帳:

Branch name-of-pulled-branch set up to track remote branch name-of-pulled-branch from origin 

我認爲我的很多困境相對於所獲取的分支有一個事實,即它是成立TR做ack遠程分支。這是爲什麼,有沒有什麼辦法來檢查提取的分支,並設置它來跟蹤遠程分支,就好像我已經使用了git pull

+0

遠程分支的「常規」形式是'refs/remotes/origin/name-of-branch'(假設遠程名爲'origin'),* not * version * without remote-name。當你拼出第二個版本時,它會讓git的「做我的意思」算法稍微錯誤。當你使用'git pull'時,你不提供遠程分支名稱的「奇怪」形式。 – torek

+0

@torek你的意思是與'name-of-branch:refs/...'相對嗎? –

+0

'fetch'的額外參數是「refspecs」,所以,「主要是」:)。只是在'x:y'中'x'部分是本地名稱,'y'部分是遠程名稱,而我只是在遠程名稱中輸入。 (我通常只運行'git fetch -p '或同等的命令,讓所有新的遠程分支根據需要彈出。)另請參閱手冊頁中的長描述,':y'部分有點奇怪。 – torek

回答

2

你想:

git fetch origin name-of-branch:refs/remotes/name-of-branch 
git checkout -b some-branch-name name-of-remote-branch --track 

這將設置跟蹤,以便git的推/拉將只是工作。

+0

如果我拉動遠程分支但沒有獲取它,爲什麼不需要執行'-b'和'--track'? –

+0

Git pull可以被認爲是git fetch的超集 - 從手冊頁:「(Git pull)使用給定的參數運行git fetch,並調用git merge將檢索到的頭合併到當前分支中。」它也爲你設置跟蹤。 – stellarhopper

+0

那麼有沒有辦法設置跟蹤而不檢出分支?當你使用'git pull''然後'git checkout' * *時,就會出現「Branch set to track ...」的分支。這意味着你可以獲取遠程分支,然後將其設置爲跟蹤檢查它,就好像你已經把它拉出來一樣。 –