Ветки в репозиториях
Основные моменты работы с git мы изучили. Нам осталось разобраться с ветками. Давайте продолжим. Введем:
git branch
Как вы видите у нас есть только одна ветка main в которую и будут попадать все наши текущие коммиты. Давайте создадим еще одну ветку в которой мы будем "править ошибки", назовем ее new
:
git branch new
Теперь у нас две ветки main и new. Давайте переключимся в ветку new, сделаем там пару коммитов и зальем все на удаленный репозиторий.
Переключим ветку:
git checkout new
Сделаем два изменения времени в файле README.md и закоммитим их последовательными коммитами:
nano README.md
git add .
git commit -m "first commit in new branch"
nano README.md
git add .
git commit -m "second commit in new branch"
И зальем на удаленный репозиторий:
git push --set-upstream origin new
Обратите внимание, что git сам подскажет правильную команду:
Зайдем на GitHub и посмотрим как там всё выглядит:
В списке веток появилась ветка new, и в ней все сделанные коммиты на текущий момент.
Давайте переключимся обратно на ветку main и сделаем коммит в ней:
git checkout main
nano README.md
git add .
git commit -m "commit from main branch"
git push
Посмотрим как ветка main выглядит на GitHub:
Далее мы можем вести разработку и создавать коммиты неограниченно долгое время и у нас будут две ветки развивающиеся параллельно.
И последний прием который часто используется, это слияние веток обратно, к примеру, после того как все ошибки исправлены и фиксы надо влить обратно в ветку разработки. Давайте вольем ветку new в ветку main.
git checkout main
git merge new
Так как в обоих ветках находится файл README.md, и он различается в каждой из веток, то git не знает какой из них брать, то вы получите какое-то сообщение о невозможности слить ветки. Кроме того во всех файлах где git увидит конфликты будут выделены конфликтные области:
Существуют различные способы решения данного конфликта, и пытливые учащиеся могут самостоятельно поискать эти способы, но мы поступим более топорно. Отредактируем файл README.md
в nano, оставив ту версию, которая нам больше нравится:
Оставим, к примеру, 14-00:
Теперь создадим коммит в который включим наш отредактированный файл:
git add .
git commit -m "README.md merge confilct solved"
И все что нам остается сделать это запушить все изменения в удаленный репозиторий:
git push
Перейдем на сайт GitHub и посмотрим как наш merge
выглядит там:
Ну вот, все коммиты сохранены, ветки слиты. Текущее значение времени в README.md 14-00. Все как мы хотели.
Ну и напоследок скажем, что данный урок не исчерпывающий и git гораздо глубже и более функционален, кроме тех, кто немного запутался в ветках и слияниях, могут немного расслабиться, так как ветки и слияния это то, с чем обычный разработчик сталкивается НЕ каждый день. И обычно в компаниях есть принятая политика создания веток и их слияния, так что придумывать всю логику вам скорее всего не придется.
На этом мы закончим наш пример работы с git. Переходите к изучению базового курса по ROS.