Ваша ветвь обновлена с происхождением / развитием
Этому утверждению нельзя всегда доверять.
git status
просто сравнивает вашу локальную копию ветви с вашей соответствующая локальная ветвь удаленного отслеживания, а не исходная удаленная ветвь, которая находится на сервере.
Хотя локальные ветки удаленного отслеживания должны соответствовать состоянию исходной удаленной ветки на сервере, они связаны с некоторыми ограничения.
Ветви удаленного отслеживания перемещаются вперед только при использовании сетевых команд.
Например:
Допустим, это текущий статус оригинала. удаленная ветвь на сервере.
master
|
A <- B
И это состояние локальной рабочей ветки и локального удаленного отслеживания, которое отслеживает исходную главную ветку на сервере.
remote/master
|
A <- B
|
master
Теперь допустим, что вы выполняете какую-то новую работу и фиксируете эту работу, не заставляя ее разрываться, поэтому ваш статус будет выглядеть так:
Мастер сервера
master
|
A <- B
Локальный мастер и Локальный удаленный / мастер
remote/master
|
A <- B <- C
|
master
Если вы запустите git status
сейчас, git ответит, показывая, что вы на 1 коммит вперед мастера, так как он просто сравнивает вашу локальную ветку master с локальной веткой удаленного / главного отслеживания, а не с исходной веткой master на сервере. К счастью, состояние удаленного / главного и главного сервера в этом сценарии точно такое же, но это не всегда так.
Предположим, что этот сценарий, когда еще один коллега-разработчик также подталкивает вещи к тому же исходному главному устройству ветвь на сервере.
Таким образом, после этих двух новых попыток от другого разработчика ваша оригинальная главная ветвь на сервере будет выглядеть следующим образом:
Мастер сервера
master
|
A <- B <- D <- E
И вы - локальная основная ветвь, и локальная удаленная / основная ветвь будет по-прежнему иметь тот же статус, как если бы ничего не происходило.
remote/master
|
A <- B <- C
|
master
Удаленная / основная ветвь вообще не показывает движения. Это происходит потому, что remote / master перемещается вперед на git, только когда любые команды, связанные с сетевым взаимодействием, выполняются с вашего локального компьютера. Поскольку с вашей машины не было сделано никакого сетевого вызова, у мелкого удаленного / главного устройства не было возможности получить статус главной ветви удаленного сервера, а затем изменить его состояние. Тупой пульт / мастер по-прежнему считает, что он соответствует текущему состоянию исходной главной ветви удаленного сервера.
Если вы сейчас запустите git status
, git
все равно ответит, показывая, что вы просто 1 коммит перед мастером, что, как мы знаем, не так.
Это то, что произошло в вашем случае,
Когда вы уволили git status
, git ответил
Ваша ветвь обновлена с происхождением / развитием
, потому что она просто сравнила вашу локальную ветку разработки с локальной веткой удаленной / разработки, но в то же время кто-то уже подтолкнул некоторые изменения в исходной ветке разработки сервера и, следовательно, когда вы делаете git pull
, он приносит вам эти изменения с сервера и объединяет их в вашей локальной ветке.