Ветка обновлена, но извлечение источника все еще приводит к изменениям - PullRequest
0 голосов
/ 02 апреля 2020

Если я проверяю свою ветку разработки и выполняю git status, я получаю сообщение:

Switched to branch development Your branch is up to date with origin/development

Но когда я делаю git pull origin development, она все равно вносит новые изменения.

Почему были внесены новые изменения, даже если ветка была обновлена?

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Ваша ветвь обновлена ​​с происхождением / развитием

Этому утверждению нельзя всегда доверять.

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, он приносит вам эти изменения с сервера и объединяет их в вашей локальной ветке.

0 голосов
/ 02 апреля 2020

Обновление может вводить в заблуждение, оно обновляется только одним способом, т.е. у вас нет новых изменений в вашем локальном репозитории с момента последней загрузки источника.

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

Если вы хотите узнать, есть ли в оригинале новые изменения по сравнению с вашим локальным репозиторием, вы можете использовать git fetch ans, тогда git status сообщит вам, что есть некоторые изменения в источнике

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