Фетч, пул и пуш
Пул
Три режима, выбираются из выпадающего списка: по умолчанию, только fast-forward или ребейз. Локальные изменения автоматически убираются в стеш и возвращаются вокруг пула, так что грязное дерево вас не блокирует.
Ветка, которая ничего не отслеживает
git pull — это фетч, а за ним слияние, и слиянию нужно знать, во что
сливать: upstream ветки. У ветки, созданной локально или переключённой без
отслеживания, его нет. Фетч при этом проходит, мимо пролетает длинный список
обновлённых рефов origin/*, а затем git останавливается с "There is no
tracking information for the current branch". Ничего не было получено и ничего
не сломалось: у второй половины просто не было цели.
Gitcito читает эту ошибку и предлагает починку кнопкой, выбирая какую — по тому, есть ли ветка на удалённом:
| Она есть на удалённом | Связать и получить — назначает upstream <удалённый>/<ветка> и затем выполняет тот pull, который вы просили. Отменяемо через ⌘Z — отмена снова снимает отслеживание. |
| Её там ещё нет | Отправить ветку — обычный push, который попутно назначает upstream. |
Предлагается origin, если он есть, иначе первый удалённый из списка. Какой из
случаев ваш, читается из рефов отслеживания, а не из сети, — так что ответ
отражает только что выполненный фетч.
Пуш
Форс-пуш всегда использует --force-with-lease — безопасный вариант, который
откажется, если удалённый репозиторий сдвинулся с тех пор, как вы последний раз
смотрели. Форс-пуш в защищённую ветку требует подтверждения (список — в
шестерёнке настроек репозитория).

Нет удалённых
Пуш, пул и фетч нуждаются в цели. Репозиторий без единого — свежий
git init, клон, у которого убрали origin — раньше оставлял эти кнопки без
действия или считал пустой фетч успехом. Теперь они открывают Добавить
удалённый репозиторий, с предупреждением: вставьте URL или создайте репо на
хосте. Добавление заканчивает начатое действие: пуш публикует текущую ветку,
пул фетчит и затем делает пул, фетч только фетчит.
Фоновый автофетч молчит, когда фетчить нечего. Диалог по таймеру он не открывает.
Больше одного удалённого репозитория
Кнопка Пуш отправляет в upstream ветки. Стрелка рядом с ней дополнительно предлагает — как только у репозитория появляется больше одного remote:
| Запушить в один remote | Выберите один — форк, зеркало, цель деплоя |
| Запушить во все N удалённых | По одному пушу на каждый, по порядку |
| Запушить все теги в | git push <remote> --tags, все локальные теги разом |
Те же два действия есть в строке каждого remote в боковой панели — а именно там вы обычно и находитесь, когда возникает такой вопрос.
Отказ одного не отменяет остальные. Пуш в форк и в его upstream — ровно тот случай, когда одна сторона отказывает, а другая всё равно должна пройти, поэтому каждый remote отчитывается отдельно: успехи перечисляются в одном тосте, а каждая неудача получает свой — с причиной от git.
Upstream ветки задаёт только первый remote в списке. У ветки один upstream, и последний remote, в который вы запушили, — не автоматически тот, за которым вы хотите её закрепить.
Оба пути проходят те же проверки, что и обычный пуш, — подтверждение защищённой ветки и охрану секретов. Публикация в два удалённых репозитория — это вдвое больше риска, а не вдвое меньше осторожности.
Ветки, на которых вы не стоите
git pull двигает только HEAD — поэтому большинство клиентов требует сперва
переключиться на ветку. Gitcito не требует: правый клик по любой локальной ветке
— на боковой панели или на её значке в графе — даёт Забрать
<ветку> и Отправить <ветку>, и оба действуют именно на неё.
Забрать <ветку> |
Перематывает локальную ссылку к её upstream, без переключения. Рабочее дерево не трогается. Отменяется по ⌘Z — отмена возвращает ветку на прежнее место. |
Отправить <ветку> |
Обычный пуш этой ветки, с теми же проверками защищённой ветки и секретов, что и кнопка на панели. |
Пул недоступен для ветки, которая ничего не отслеживает — забирать неоткуда. На ветке, где вы стоите, оба сводятся к обычному пулу, который обновляет и рабочее дерево.
Важное ограничение: ветка, разошедшаяся с upstream, отклоняется — с сообщением об этом. Согласовать расхождение — значит сделать merge или rebase, а им нужно рабочее дерево, так что этот случай по-прежнему стоит переключения. Принудительная отправка ветки, на которой вы не стоите, предлагается, если удалённый репозиторий отклонил пуш; путь «забрать и повторить» — нет, по той же причине.
Фетч
У Получить есть своя кнопка на панели инструментов, рядом с Пул. Она получает
со всех удалённых и чистит устаревшие, так что ваши рефы origin/* и все счётчики
впереди/позади становятся актуальными — и не трогает ни вашу ветку, ни рабочее
дерево. Это та кнопка, когда хочется посмотреть, что сделали остальные, не
сдвигая собственную работу.
Есть также фоновый авто-фетч с интервалом, который вы задаёте (Настройки →
Общие). Наведите курсор на кнопку «Получить» — возраст проявится под ней, 4 мин
назад, янтарным, если фетч старше пятнадцати минут. Он никогда не занимает места
в панели, потому что отвечает на вопрос, который задают лишь потянувшись к
кнопке. Читается из FETCH_HEAD, так что git fetch, запущенный в терминале,
считается наравне с запущенным здесь.
Фетч, обнаруживший переписанную историю, говорит об этом: тост называет ветку, а её строка получает маркер, открывающий что изменилось с тех пор ровно на том коммите, на который она указывала раньше.
Много репозиториев разом
- Вкладка группы умеет делать Фетч всех / Пул всех по всему своему поддереву.
- Центр управления делает это по всему рабочему пространству и умеет тянуть только те репозитории, которые действительно отстали.
Удалённые репозитории
Добавляйте, редактируйте, удаляйте и фетчите отдельные remote из боковой панели. Строки веток несут бейджи присутствия по каждому remote, так что видно с первого взгляда, у каких удалённых репозиториев есть копия ветки.
Фетч, пул или пуш без удалённых открывает тот же диалог «Добавить удалённый репозиторий», вместо того чтобы успешно ничего не сделать. См. фетч, пул и пуш.
См. также: Центр управления · Хостинги и пул-реквесты