В Git ветки строго локальные . Один разработчик не может изменить удаленные ветви другого разработчика (см. Примечание внизу). Однако в случае bare репозитория вы можете «протолкнуть» свои изменения в него, чтобы обновить ветви удаленного репозитория, если ваши изменения приведут к ускоренной перемотке вперед.
Но если два разработчика выполняют фиксацию в одном и том же удаленном репозитории, то только один сможет ускорить переадресацию удаленной ветви без предварительного обновления их ветви.
Например, допустим, Алиса и Боб работают над главной веткой в своих локальных репозиториях, каждый из которых клонируется из общего (пустого) репозитория на сервере. Если Алиса заканчивает свою работу первой, когда она вносит свои зафиксированные изменения в общий голый репозиторий, она ускоряет пересылку главной ветки голого репо.
Теперь Боб не может ускорить пересылку мастер-ветви голого репо без предварительного обновления своей локальной ветки, чтобы включить коммиты, добавленные Алисой (поскольку добавленные коммиты не являются предками коммитов, созданных Алисой).
Один из способов, которыми Боб может это сделать, - вытащить (или, предпочтительно, перебазировать) из голого репо после того, как Алиса подтолкнула свои коммиты. Это объединит изменения Алисы с ветвью Боба и даст возможность Бобу быстро переместиться вперед к главной ветке голого репо.
Возможны другие рабочие процессы: Алиса и Боб могут совместно извлекать друг друга напрямую, не используя общий открытый репозиторий. На самом деле возможностей практически нет. Но, как правило, объединение в Git выполняется путем изменения .
[примечание: на самом деле можно загружать репозитории, не являющиеся открытыми, и, таким образом, обновлять ветки других людей, однако это часто дает неинтуитивные результаты, не считается типичным рабочим процессом git и, как правило, не рекомендуется]