Тестирование с синхронизированными ветками
На предыдущих этапах мы увидели, что происходит, когда наша локальная ветка находится впереди от отслеживаемой удаленной ветки. Теперь давайте посмотрим, что покажут команды git status
и git log @{u}..HEAD
, когда наша локальная ветка синхронизирована с отслеживаемой удаленной веткой.
Поскольку в этой лабораторной среде у нас нет реального удаленного репозитория, мы можем симулировать состояние синхронизации, удалив коммит, который мы только что сделали. В реальной ситуации синхронизация означала бы, что вы отправили свои локальные коммиты в удаленный репозиторий.
Мы можем использовать команду git reset
для перемещения указателя нашей локальной ветки назад к предыдущему коммиту. Будьте осторожны при использовании git reset
в реальных проектах, так как эта команда может удалить изменения! В рамках этой лабораторной работы это безопасно, так как мы просто симулируем состояние.
Убедитесь, что вы находитесь в директории ~/project/my-time-machine
:
cd ~/project/my-time-machine
Теперь сбросим нашу ветку к коммиту, предшествующему последнему. Мы можем использовать HEAD~1
для ссылки на коммит перед текущим HEAD
.
git reset --hard HEAD~1
Вы должны увидеть вывод, похожий на следующий, который указывает, что HEAD
был перемещен назад и рабочая директория была обновлена:
HEAD is now at a1b2c3d Send a message to the future
(Примечание: Хэш коммита будет совпадать с хэшем вашего первого коммита.)
Теперь, когда мы сбросили нашу локальную ветку к состоянию первого коммита, проверим статус еще раз:
git status
На этот раз вывод должен показать, что ваша ветка обновлена и синхронизирована с отслеживаемой удаленной веткой:
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
Сообщение Your branch is up to date with 'origin/master'.
говорит нам, что наша локальная ветка master
синхронизирована с отслеживаемой удаленной веткой.
Наконец, давайте снова используем команду git log @{u}..HEAD
, чтобы проверить, есть ли какие-либо коммиты, находящиеся впереди:
git log @{u}..HEAD
Эта команда не должна вывести никаких результатов, так как на нашей локальной ветке (HEAD
) нет коммитов, которых бы не было на upstream-ветке (@{u}
).
Это подтверждает, что наша локальная ветка теперь синхронизирована с отслеживаемой удаленной веткой. Понимание вывода команды git status
и использование git log @{u}..HEAD
являются важными навыками для управления вашим Git-воркфлоу и эффективной совместной работы.