2011-09-27 74 views
8

git pull --help如何「輕鬆」拉所有分支?

將遠程存儲庫中的更改合併到當前分支中。

我拉着git倉庫離線查看代碼,並喜歡有不同分支的更新代碼。如何輕鬆地爲所有分支拉取代碼而無需手動爲每個分支拉動?

--all - 取回所有遙控器。

- 都沒有幫助。

+0

http:// stackoverflow。com/questions/4318161/can-git-pull-all-update-all-my-local-branches should help – VonC

回答

8

如果本地存儲庫僅用於只讀,並且沒有任何文件被修改,那麼下面的腳本就可以實現。

for i in $(git branch | sed 's/^.//'); do git checkout $i; git pull; done 

似乎沒有相同的git等效命令。

5

pull將遠程分支合併到您當前的本地分支,因此拉動所有遠程分支可能不是您想要的。

0

您必須單獨合併每個分支。如果你合併成多個分支並且其中有多個合併衝突,那麼你怎麼可能同時解決呢?

+0

Gareth - 正如我所提到的,我只用git進行離線查看,不會有任何衝突。 git命令或shell腳本可能滿足我的要求。 –

7

像Praveen Sripati的回答一樣,但作爲一個shell函數,它將您帶回到您開始的分支。

只是把這個在你的〜/ .bash_aliases文件:

function pull-all() { 
    START=$(git branch | grep '\*' | set 's/^.//'); 
    for i in $(git branch | sed 's/^.//'); do 
     git checkout $i; 
     git pull || break; 
    done; 
    git checkout $START; 
}; 

隨着||如果出現衝突或類似情況,打破它並不會令人滿意。

+0

工作完美,thx隊友! –

1

靈感來自@cellofellow我加this.profile在Mac OS X:

function git-pull-all() { 
    START=$(git symbolic-ref --short -q HEAD); 
    for branch in $(git branch | sed 's/^.//'); do 
     git checkout $branch; 
     git pull ${1:-origin} $branch || break; 
    done; 
    git checkout $START; 
}; 

function git-push-all() { 
    git push --all ${1:-origin}; 
}; 

的主要區別是:

  1. 我得到當前分支git branch | grep '\*' | set 's/^.//'而不是git branch | grep '\*' | set 's/^.//'

  2. 您可以提供遙控器作爲參數,例如git-pull-all origin。如果您省略參數,則默認爲原點。

  3. 還添加了一個類似的快捷方式將多個分支推回服務器。

+0

幹得好。我喜歡改變使用哪個遙控器的選項。 – cellofellow

1

如果您只需要離線功能,您可以簡單呼叫git fetch -all以獲取所有當前信息。現在,您可以在磁盤上獲得所有信息,並可以脫機工作。簡單合併或簽出您想要處理的分支。 Git pull是git fetch && git merge

相關問題