tyoma_koder
@tyoma_koder

Как работает git pull?

1. Я скопировал к себе репозиторий, удалил один из файлов и запушил это локально. Прописал git pull, но удалённый файл не появился.
2. Тогда я скопировал репозиторий в другую папку, создал новый файл, запушил это на сервер, вернулся в старую папку, прописал git pull и новый файл появился.
В 1м случае не работало потому что на сервере небыло комитов которых небыло бы локально, а во 2м сработало потому что появился новый комит которого небыло локально? Т.е. git pull просто ищет комиты которых недостаёт локально и добавляет их если такие есть, но не трогает локальные комиты которых нет на сервере?
  • Вопрос задан
  • 2636 просмотров
Решения вопроса 1
@zaur45
1. Давайте разберёмся с терминологией. "Запушил локально" это, как я понимаю, git add + git commit. Обе эти команды работают с локальным репозиторием. После их выполнения в нём появится ещё один коммит, локальный репозиторий будет опережать удалённый (remote). Состояние удалённого репозитория не изменится.

git pull это git fetch + git merge. Первая команда забирает с удалённого репозитория его текущее состояние, не меняя файлов рабочей папки, вторая пытается слить изменения удалённого и локального репозиториев. Поскольку после "git add + git commit" локальный репозиторий опережает удалённый на один коммит, никаких изменений локально не произошло.

2. После того, как в параллельном репозитории был создан файл, последовательность комманд, как я понимаю, была такая: git add, git commit, git push. git add + git commit создали ещё один коммит локально, git push отправил два коммита в удалённый репозиторий: первый был создан локально на шаге 1 и скопировался вместе с репозиторием, второй мы создали только что. Теперь у локального репозитория 2 и удалённого репозитория одинаковая история коммитов, локальный репозиторий 1 отстаёт от удалённого на один коммит. При выполнении git pull в репозитории 1 он "догонит" удалённый репозиторий и в нём появится новый файл.

Для изучения git рекомендую ресурс https://learngitbranching.js.org/?locale=ru_RU -- там в простой форме научат пониманию основных команд с иллюстрацией того что именно они делают.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы