Git всегда должен работать над историей. Поэтому, если вы сделаете фиксацию, а затем вытащите фиксации из удаленного репо, он должен будет объединить эту фиксацию поверх истории вашего местного репо. Если у вас нет новых коммитов на локальном уровне, ваше местное репо будет только fast-forward
и добавит коммиты отдачи сверху. Однако, поскольку вы сделали запись (+), git автоматически объединит ваши изменения поверх вашей истории. Вы можете технически stash свои изменения, потяните с пульта, а затем примените свои изменения сверху. Я бы не рекомендовал это.
Притворите, что вы сделали начальную фиксацию (1
) и перетащили ее на дистанционное репо. Если сотрудник взял эту фиксацию и добавил фиксацию (2
), прежде чем нажимать ее обратно, теперь пульт будет находиться в 2
(с историей 2-1
). Теперь вы добавляете еще одну фиксацию (3
) и пытаетесь вытащить с пульта. Git поймет, что ваша местная история идет 3-1
, а удаленная история - 2-1
. Где моя 2
? Git должен получить это в вашу историю, так или иначе ... он сливается. Вы не просили git переписать историю хотя (3-2-1
), поэтому она пытается объединить ее сверху (2-3-1
). Теперь он просто применил изменения 2
поверх 3
, поэтому он должен сделать фиксацию, следовательно, Merge branch 'ios-web-dev' of github.com:estudiotrilha/InEvent into ios-web-
.
Теперь, если вы попытались нажать на удаленный (с историей 2-1
), вы получите ошибку, так как в вашем местном репо (с историей 3-1
) отсутствует какая-то история. Вы можете (, но не должны) сделать git push <branch> -f
, который заставит нажать (и перезаписать локальный пульт, эффективно удаляя фиксацию 2
). Если вы никогда не совершили фиксацию 3
после нажатия на пульт дистанционного управления, git без проблем вытащил 2
, так как он может просто добавить (fast-foward) 2
поверх вашего местного 1
(2-1
).
Иногда я делаю git-stash
, прежде чем вытаскивать, чтобы сохранить это сообщение, но обычно, если я знаю, что кто-то внес изменения, которые мне нужны, и я не много работал над местным репо (ничего, что нужно сделать). Пример рабочего процесс в том, что может быть:
git status # a few working changes
git stash # save your working changes to a temporary commit
git pull origin <branch> # merge in the remote, fast-forwarding your repo
git stash apply # apply your working changes from before
Если у вас есть несколько фиксаций на локальный репо, вы можете использовать технически git-rebase
, чтобы получить историю «под» ваши коммиты, чтобы избежать этого дополнительного сообщения фиксации. Так что если вы локально имели 3-1
, а пульт был на 2-1
, вы могли бы пересобрать свой филиал, чтобы засунуть 2
в свои 3
и у вас есть 3-2-1
. Однако это не стоит хлопот (по моему мнению) и выходит за рамки этого ответа.
Вот почему полезно использовать git с 'git fetch', а не' git pull' – zerkms