8

git拉——帮助

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

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

--all -- 获取所有遥控器。

——一切都没有帮助。

4

6 回答 6

8

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

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

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

于 2011-09-27T09:20:41.240 回答
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;
};

与 || 如果发生冲突或类似情况,break it 做得令人满意,不会把事情搞砸。

于 2013-01-19T01:38:27.583 回答
5

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

于 2011-09-27T07:52:55.673 回答
1

受@cellofellow 的启发,我在 Mac OS X 上添加了这个:.profile

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. 还添加了一个类似的快捷方式来将多个分支推回服务器。

于 2013-07-16T13:33:53.360 回答
1

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

于 2014-03-26T13:44:27.030 回答
0

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

于 2011-09-27T07:55:59.897 回答