Как проверить, актуален ли локальный репозиторий Git по сравнению с удаленным

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, актуален ли ваш локальный репозиторий Git по сравнению с его удаленным аналогом. Мы рассмотрим основные шаги для достижения этого, начиная с получения последних изменений из удаленного репозитория без изменения вашей локальной работы.

После операции получения изменений вы научитесь сравнивать свою локальную ветку с удаленной веткой, чтобы выявить любые различия. Наконец, мы изучим, как использовать команду git log для визуальной проверки того, что ваши локальные коммиты синхронизированы с удаленным репозиторием, обеспечивая тем самым, что у вас есть самая актуальная версия проекта.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") git/CollaborationandSharingGroup -.-> git/pull("Update & Merge") git/CollaborationandSharingGroup -.-> git/remote("Manage Remotes") subgraph Lab Skills git/status -.-> lab-560101{{"Как проверить, актуален ли локальный репозиторий Git по сравнению с удаленным"}} git/log -.-> lab-560101{{"Как проверить, актуален ли локальный репозиторий Git по сравнению с удаленным"}} git/fetch -.-> lab-560101{{"Как проверить, актуален ли локальный репозиторий Git по сравнению с удаленным"}} git/pull -.-> lab-560101{{"Как проверить, актуален ли локальный репозиторий Git по сравнению с удаленным"}} git/remote -.-> lab-560101{{"Как проверить, актуален ли локальный репозиторий Git по сравнению с удаленным"}} end

Получение изменений из удаленного репозитория с помощью git fetch

На этом этапе мы научимся получать изменения из удаленного репозитория Git. Представьте, что вы работаете над проектом с другими людьми, и они внесли некоторые обновления. Команда git fetch позволяет вам получить эти обновления без изменения собственной работы.

Сначала имитируем наличие удаленного репозитория. Для этого добавим удаленный URL-адрес к нашему существующему локальному репозиторию. В реальной ситуации это будет URL-адрес репозитория, размещенного на платформе, такой как GitHub или GitLab.

Перейдите в каталог проекта, если вы еще не там:

cd ~/project/my-time-machine

Теперь добавим фиктивный удаленный URL-адрес. Назовем этот удаленный репозиторий origin, что является распространенной практикой.

git remote add origin https://github.com/example/my-time-machine.git

Эта команда не выводит никаких результатов, но она настраивает ваш локальный репозиторий на работу с удаленным репозиторием с именем origin.

Теперь используем команду git fetch для получения информации об изменениях в удаленном репозитории. Поскольку это фиктивный URL-адрес, команда git fetch на самом деле не загрузит никакого кода, но имитирует процесс и показывает, что она сделает.

git fetch origin

Вы можете увидеть вывод, похожий на следующий (точный вывод может отличаться в зависимости от версии Git и ваших настроек):

fatal: repository 'https://github.com/example/my-time-machine.git/' not found

Не беспокойтесь об ошибке "репозиторий не найден". Это ожидаемо, так как мы использовали фиктивный URL-адрес. Главное, что вы выполнили команду git fetch.

В реальной ситуации команда git fetch origin подключится к удаленному репозиторию, загрузит все новые коммиты и ветки, которых нет в вашем локальном репозитории, и сохранит их в специальной области. Она не объединяет эти изменения с вашей текущей рабочей веткой. Это позволяет вам увидеть, какие изменения внесли другие, прежде чем решить, интегрировать ли их в свою работу.

Представьте, что git fetch - это поход в почтовое отделение за почтой. Вы получаете почту (изменения), но не открываете ее и не кладете на свой стол (не объединяете с своей работой), пока не будете готовы.

Сравнение локального и удаленного репозиториев с помощью git status

На этом этапе мы будем использовать команду git status, чтобы увидеть, как наш локальный репозиторий сравнивается с удаленным после выполнения операции получения изменений (fetch).

Перейдите в каталог проекта, если вы еще не там:

cd ~/project/my-time-machine

Теперь выполните команду git status:

git status

Вы должны увидеть вывод, похожий на следующий:

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

Разберем этот вывод:

  • "On branch master": Это сообщает, что вы в настоящее время находитесь на ветке master.
  • "Your branch is up to date with 'origin/master'": Это ключевая часть. Она показывает, что ваша локальная ветка master имеет те же коммиты, что и ветка master в удаленном репозитории origin.

Даже несмотря на то, что команда git fetch на предыдущем этапе завершилась ошибкой из-за фиктивного удаленного URL-адреса, Git все равно обновил свою внутреннюю отслеживающую информацию. В реальной ситуации, когда команда git fetch успешно получает новые коммиты, вывод команды git status сообщит, что ваша локальная ветка отстает от удаленной и предложит выполнить git pull для интеграции изменений.

Команда git status - это окно в состояние вашего репозитория. Она сообщает, на какой ветке вы находитесь, синхронизирована ли ваша локальная ветка с ее удаленным аналогом, и есть ли у вас несохраненные изменения в рабочем каталоге или в области подготовки (staging area). Регулярно проверять git status - хорошая привычка, которая позволяет быть в курсе состояния вашего проекта.

Использование git log для проверки синхронизированных коммитов

На этом этапе мы будем использовать команду git log для просмотра истории коммитов и понимания того, как команда git fetch влияет на то, что мы видим.

Перейдите в каталог проекта, если вы еще не там:

cd ~/project/my-time-machine

Выполните команду git log для просмотра истории коммитов:

git log

Вы должны увидеть коммит, который вы сделали в предыдущем упражнении:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master, origin/master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

Обратите внимание, что в выводе теперь показано (HEAD -> master, origin/master). Это означает, что как ваша локальная ветка master (HEAD -> master), так и отслеживающая ветка для удаленной ветки origin/master (origin/master) указывают на один и тот же коммит. Это подтверждает, что ваш локальный репозиторий синхронизирован с удаленным (или, по крайней мере, с информацией, которую Git имеет о удаленном репозитории после выполнения команды git fetch).

В реальной ситуации, когда команда git fetch получает новые коммиты из удаленного репозитория, выполнение команды git log покажет эти новые коммиты. Они появятся в истории лога, и указатель origin/master будет на последнем коммите из удаленного репозитория, в то время как ваша локальная ветка master останется на последнем локальном коммите. Эта визуальная разница в логе помогает вам точно увидеть, какие изменения доступны из удаленного репозитория, прежде чем вы объедините их.

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

Нажмите q для выхода из режима просмотра лога.

Резюме

В этом упражнении (лабораторной работе) мы научились проверять, является ли локальный репозиторий Git актуальным по сравнению с его удаленным аналогом. Мы начали с понимания назначения команды git fetch, которая получает изменения из удаленного репозитория без изменения локальной рабочей копии. Мы смоделировали добавление удаленного репозитория и затем выполнили команду git fetch, чтобы увидеть, как она взаимодействует с удаленным репозиторием.

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