【发布时间】:2011-11-25 19:35:33
【问题描述】:
git pull --help
将来自远程存储库的更改合并到当前分支中。
我拉取 git 存储库以离线查看代码,并希望获得不同分支的更新代码。如何在不手动拉取每个分支的情况下轻松拉取所有分支的代码?
--all -- 获取所有遥控器。
--都没有帮助。
【问题讨论】:
标签: synchronization branch git-pull
git pull --help
将来自远程存储库的更改合并到当前分支中。
我拉取 git 存储库以离线查看代码,并希望获得不同分支的更新代码。如何在不手动拉取每个分支的情况下轻松拉取所有分支的代码?
--all -- 获取所有遥控器。
--都没有帮助。
【问题讨论】:
标签: synchronization branch git-pull
如果您只需要离线功能,您可以简单地拨打git fetch -all 以获取所有当前信息。现在您的磁盘上拥有所有信息,并且可以脱机工作。简单合并或签出您要处理的分支。 git pull 是git fetch && git merge。
【讨论】:
受@cellofellow 的启发,我在 Mac OS X 上将this 添加到了我的.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};
};
主要区别在于:
我正在使用git branch | grep '\*' | set 's/^.//' 而不是git branch | grep '\*' | set 's/^.//' 获取当前分支。
您可以提供遥控器作为参数,例如git-pull-all origin。如果省略该参数,则默认为原点。
还添加了一个类似的快捷方式来将多个分支推回服务器。
【讨论】:
如果本地存储库用于只读并且没有文件被修改,那么下面的脚本就可以解决问题。
for i in $(git branch | sed 's/^.//'); do git checkout $i; git pull; done
似乎没有相同的 git 等效命令。
【讨论】:
就像 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 可以很好地解决问题。
【讨论】:
您必须单独合并每个分支。如果您在多个分支中合并,并且其中多个分支存在合并冲突,您怎么可能同时解决呢?
【讨论】:
pull 将远程分支合并到您当前的本地分支中,因此拉取所有远程分支可能不是您想要的。
【讨论】: