Как легко «убрать» все ветви? - PullRequest
8 голосов
/ 27 сентября 2011

git pull --help

Включает изменения из удаленного репозитория в текущую ветку.

Я вытащил git-репозиторий для автономного просмотра кода и хотел бы получить обновленный код для разных веток. Как легко вытащить код для всех веток, не делая вручную для каждой ветки?

- все - Выбрать все пульты.

- все не помогло.

Ответы [ 6 ]

8 голосов
/ 27 сентября 2011

Если локальный репозиторий используется только для чтения и ни один из файлов не изменен, то скрипт ниже поможет.

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

Кажется, что для этой же команды нет эквивалента git.

7 голосов
/ 19 января 2013

Как и ответ Правина Срипати, но как функция оболочки, и он возвращает вас к ветви, в которой вы начали.

Просто поместите это в ваш файл ~ / .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;
};

С ||сломай это делает удовлетворительную работу, не портя вещи, если есть конфликт или тому подобное.

5 голосов
/ 27 сентября 2011

pull объединяет удаленные ветви с вашей текущей локальной ветвью, поэтому, вероятно, вы не хотите извлекать все удаленные ветви.

1 голос
/ 26 марта 2014

Если вам нужна только функция офлайн, вы можете просто позвонить git fetch -all, чтобы получить всю текущую информацию.Теперь у вас есть вся информация на вашем диске и вы можете работать в автономном режиме.Просто объедините или оформите ветку, над которой вы хотите работать.Git pull это git fetch && git merge.

1 голос
/ 16 июля 2013

Вдохновленный @cellofellow, я добавил это к своему .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. Если этот параметр не указан, по умолчанию используется значение origin.

  3. Также добавлен аналогичный ярлык для отправки нескольких веток назад на сервер.

0 голосов
/ 27 сентября 2011

Вы должны объединить каждую ветку отдельно. Если вы объединили несколько ветвей, и у нескольких из них возникли конфликты со слиянием, как вы могли бы разрешить их одновременно?

...