如何轻松“git pull”所有分支?

时间:2011-09-27 07:46:18

标签: synchronization branch git-pull

  

git pull --help

     

将来自远程存储库的更改合并到当前分支中。

我拉git存储库以获取代码的离线视图,并希望获得不同分支的更新代码。如何在不手动拉动每个分支的情况下轻松拉取所有分支的代码?

  

- all - 获取所有遥控器。

- 一切都没有帮助。

6 个答案:

答案 0 :(得分:8)

如果本地存储库用于只读且没有任何文件被修改,那么下面的脚本就可以了。

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

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

答案 1 :(得分: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;
};

使用||如果发生冲突之类的话,打破它会做出令人满意的工作。

答案 2 :(得分:5)

pull将远程分支合并到当前的本地分支中,因此拉动所有远程分支可能不是您想要的。

答案 3 :(得分:1)

受@cellofellow的启发我在Mac OS X上向.profile添加了this

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。如果省略该参数,则默认为origin。

  3. 还添加了一个类似的快捷方式,将多个分支推回服务器。

答案 4 :(得分:1)

如果您只需要离线功能,则可以简单地致电git fetch -all以获取所有当前信息。现在,您可以在磁盘上获得所有信息,并且可以脱机工作。简单合并或签出您要处理的分支。 Git pull是git fetch && git merge

答案 5 :(得分:0)

您必须单独合并每个分支。如果你合并了多个分支并且其中一个分支有合并冲突,你怎么可能同时解决呢?