Может ли "git pull --all" обновить все мои локальные филиалы? - PullRequest
425 голосов
/ 30 ноября 2010

У меня часто есть как минимум 3 удаленных филиала: мастер, постановка и производство.У меня есть 3 локальные ветви, которые отслеживают эти удаленные ветви.

Обновление всех моих локальных ветвей утомительно:

git fetch --all
git rebase origin/master
git checkout staging
git rebase origin/staging
git checkout production
git rebase origin/production

Я бы хотел просто сделать "git pull -all"", но я не смог заставить его работать.Кажется, он выполняет «fetch --all», затем обновляет (перемотает вперед или объединяет) текущую рабочую ветвь, но не другие локальные ветви.

Я все еще застрял, переключаясь вручную на каждую локальную ветку иобновление.

Ответы [ 22 ]

0 голосов
/ 15 апреля 2019

Следующая однострочная строка ускоряет пересылку всех ветвей, у которых есть ветвь, если это возможно, и печатает ошибку в противном случае:

git branch \
  --format "%(if)%(upstream:short)%(then)git push . %(upstream:short):%(refname:short)%(end)" |
  sh

Как это работает?

ИспользуетсяПользовательский формат с помощью команды git branch.Для каждой ветви, имеющей ветвь восходящего потока, она печатает строку со следующим шаблоном:

git push . <remote-ref>:<branch>

Это может быть передано непосредственно в sh (при условии, что имена ветвей правильно сформированы).Пропустите | sh, чтобы увидеть, что он делает.

Предостережения

Однострочник не будет связываться с вашими пультами.Выполните git fetch или git fetch --all перед его запуском.

В настоящее время извлеченная ветвь не будет обновлена ​​сообщением типа

! [remote rejected] origin/master -> master (branch is currently checked out)

. Для этого вы можете прибегнуть к обычномуgit pull --ff-only.

Псевдоним

Добавьте следующее к вашему .gitconfig, чтобы git fft выполнял эту команду:

[alias]
        fft = !sh -c 'git branch --format \"%(if)%(upstream:short)%(then)git push . %(upstream:short):%(refname:short)%(end)\" | sh' -

См. Также мой .gitconfig.Псевдоним - это сокращение от «ускоренного отслеживания (ответвления)».

0 голосов
/ 30 сентября 2016

По состоянию на git 2.9:

git pull --rebase --autostash

См. https://git -scm.com / docs / git-rebase

Автоматически создайте временный тайник до начала операции и примените его после завершения операции.Это означает, что вы можете запустить rebase на грязном рабочем дереве.Однако используйте с осторожностью: окончательное приложение-хранилище после успешной перезагрузки может привести к нетривиальным конфликтам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...