2013-07-19 54 views
3

我知道還有其他問題可以解決這個問題的變種。即this一。我如何一次拉出所有分支 - 包括新創建的分支?

問題在於答案假定所有本地分支已經在跟蹤某個遠程分支(甚至遠程存在)。

我現在面臨的問題是我正在與一個遠程團隊合作,有時他們可能會創建一個本地沒有的遠程分支。

如何在1條命令中將最新的更改同時拉到我本地跟蹤的分支上,並且拉出了我沒有跟蹤的所有分支的最新版本。

當我做git pull --all,只是拉我的最新追蹤分支。

謝謝。

編輯:

我有兩個遙控器 - bitbucketheroku

我想從我的bitbucket遙控器中拉出所有分支....不是從我的heroku遙控器。

我這樣做:

$ git pull bitbucket --all fatal: fetch --all does not take a repository argument

這:

$ git pull --all bitbucket fatal: fetch --all does not take a repository argument

而且這樣的:

$ git pull bitbucket Password: You asked to pull from the remote 'bitbucket', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.

+0

請更新您的問題,提供更多關於您想要什麼(您想要或不想從中獲取哪些遙控器)的詳細信息,您嘗試過的命令以及結果。 – 2013-07-19 23:47:00

+0

@Cupcake我已經做到了。 – marcamillion

回答

3
$ git remote update 
$ git pull --all 

應該做的 - 雖然它不是1級的命令

+0

問題是我有2個遙控器。 Heroku和bitbucket。我如何考慮這一點?當我做'git遠程更新'時,它檢查的第一個遠程是Heroku - 我不希望它做。 – marcamillion

+0

'git remote update bitbucket'應該得到一個最新的bitbucket – exussum

+0

如何指定從'bitbucket'中取出? '$ git pull bitbucket --all fatal:fetch --all不採取存儲庫參數'會發生什麼。如果我只是做'git pull --all',它會首先嚐試從'heroku'中取出。 – marcamillion

0
基於從關於樓主哪個遠程他想獲取新情況

更新答案:

git fetch bitbucket 

將更新您的遠程跟蹤分支以及如果遠程有新的分支,請添加新的分支。

fetch不會更新您的本地分支,除非您也傳遞給它一個refspec,它只會在這種情況下進行快進或強制更新,而不是真正的合併。

這裏是一個別名將從到位桶獲取和更新兩個遠程追蹤分支和當地主分支:

sync = "!git checkout --quiet head && git fetch --prune bitbucket +refs/heads/*:refs/remotes/bitbucket/* master:master && git checkout --quiet - || git checkout --quiet -" 

你使用這樣的:git sync。完成!

--prune選項提取意味着它也將刪除過時的遠程跟蹤分支不再存在於你的bitbucket遠程。

參考+refs/heads/*:refs/remotes/bitbucket/*意味着從bitbucket中獲取所有分支,並將它們映射到我們的遠程跟蹤分支以獲取本地回購庫中的bitbucket。前面的+意味着它將允許強制更新,這通常適用於您的遠程跟蹤分支。

該參考master:master意味着採取master在bitbucket分支,並使用它來更新您的本地master分支。由於沒有+,它不會執行強制更新。如果您想允許,請在前面添加一個+,如下所示:+master:master

git checkout --quiet head是必要的,如果你碰巧有你的本地master檢出,因爲否則fetch將不會更新它,而檢出。如果您在運行該命令時碰巧檢出了它,它將檢出您直接提交的提交(這是head的含義),因此master分支標籤可以在您不在其上時移動。

git checkout --quiet - || git checkout --quiet -會檢查您運行git checkout --quiet head之前的任何分支,無論分支的獲取和更新是否工作。 (實際上我在失敗的時候遇到了問題,我不知道爲什麼......如果你最終處於分離狀態,只需運行git checkout <branch name>即可)。


老答案:

如果使用git fetch --all,將從所有你已經添加到您的回購協議遙控器獲取所有分支機構。它不會更新您所有的本地分支機構,但這只是一個開始。

+1

我在」你永遠不應該('永遠不會','很好,幾乎沒有')使用無論如何拉「營自己,所以我認爲這是一個功能。 :-) – torek

+0

好吧,我不想從所有遙控器中拉出所有分支。我只想從1個遙控器拉出所有分支。我怎麼用'git fetch'來做到這一點? – marcamillion

+0

@marcamillion'git fetch '應該給你你想要的。 – 2013-07-20 03:14:53

0

git fetch all
也是非侵入性選項。

相關問題