Получение изменений из удаленного репозитория с помощью git fetch
На этом этапе мы научимся получать изменения из удаленного репозитория. Представьте, что вы работаете над проектом с другими разработчиками, и они внесли некоторые обновления. Вам нужно получить эти обновления на свою локальную машину. Для этого используется команда git fetch
. Она загружает последние изменения из удаленного репозитория, но не объединяет их с текущей веткой.
Сначала имитируем наличие удаленного репозитория. Создадим пустой (bare) репозиторий и добавим его в качестве удаленного для нашего существующего репозитория my-time-machine
.
cd ~/project
mkdir remote-repo.git
cd remote-repo.git
git init --bare
Этот код создает пустой Git-репозиторий, который обычно используется в качестве центрального репозитория, из которого разработчики выгружают и загружают изменения.
Теперь вернемся в наш репозиторий my-time-machine
и добавим этот пустой репозиторий в качестве удаленного.
cd ~/project/my-time-machine
git remote add origin ~/project/remote-repo.git
Мы назвали наш удаленный репозиторий origin
, что является распространенной практикой. Теперь проверим, что удаленный репозиторий был добавлен правильно.
git remote -v
Вы должны увидеть вывод, похожий на следующий, показывающий URL-адреса для получения и отправки изменений для удаленного репозитория origin
:
origin /home/labex/project/remote-repo.git (fetch)
origin /home/labex/project/remote-repo.git (push)
Теперь имитируем изменение в удаленном репозитории. Поскольку это пустой репозиторий, мы не можем напрямую делать коммиты в нем. Вместо этого мы имитируем изменение, создав новый файл в директории пустого репозитория.
cd ~/project/remote-repo.git
echo "This is a remote change" > remote_file.txt
Теперь вернемся в наш репозиторий my-time-machine
.
cd ~/project/my-time-machine
На данном этапе ваш локальный репозиторий не знает о файле remote_file.txt
, который был добавлен в имитируемый удаленный репозиторий. Именно здесь приходит на помощь команда git fetch
.
Запустите команду git fetch
:
git fetch origin
Вы, возможно, не увидите большого количества вывода, или же увидите что-то, указывающее на то, что были получены новые объекты.
Команда git fetch origin
подключилась к удаленному репозиторию origin
и загрузила все новые коммиты и объекты, которых еще нет в вашем локальном репозитории. Однако она не объединила эти изменения с текущей веткой (master
). Изменения теперь доступны в вашем локальном репозитории, но они хранятся в специальной ветке, которая отслеживает удаленный репозиторий, обычно называемой origin/master
.
Вот основное различие между git fetch
и git pull
. git pull
по сути представляет собой последовательное выполнение git fetch
и объединения изменений. Используя сначала git fetch
, вы можете увидеть, какие изменения доступны на удаленном репозитории, прежде чем решить, интегрировать ли их в свою работу. Это дает вам больше контроля и помогает избежать непредвиденных конфликтов.
На следующем этапе мы увидим, как сравнить вашу локальную ветку с загруженной удаленной веткой, чтобы понять, какие изменения были загружены.