Прохождение Learn Git Branching
БэкендерBranching начинается с азов.
1. Знакомство с Git commit
В этом уровне объясняется, что такое коммиты и как их следует делать. Для прохождения уровня достаточно ввести две команды для коммита, а именно:
git commit -m "First commit" git commit -m "Second commit"
Примечание Чтобы перейти в консоль LearnGitBranching, нажмите Tab
.
Вообще, достаточно и просто двух команд git commit
. Однако правилом хорошего тона является указание ветки (у нас это main
) и именование коммитов в соответствии с тем, какие изменения были в них внесены.
2. Ветвление в Git
В этом уровне следует создать и переключиться на новую ветку bugFix
:
git branch bugFix git checkout bugFix
3. Git merge
Теперь надо понять, как объединять изменения из двух разных веток. Для этого будем использовать команду git merge
. Такой тип слияния создаёт коммит, который имеет сразу двух родителей. Для прохождения уровня введите следующие команды:
git branch bugFix git checkout bugFix git commit -m "First commit" git checkout main git commit -m "Second commit" git merge bugFix
4. Git rebase
Это второй способ объединения изменений в двух ветках. При ребейзе Git по сути копирует набор коммитов и переносит их в другое место. В учебнике сказано, что с rebase история коммитов будет чище, но в основном используется именно merge
.
Давайте посмотрим на решение:
git branch bugFix git checkout bugFix git commit -m "First commit" git checkout main git commit -m "Second commit" git checkout bugFix git rebase main
Едем дальше
Далее в прохождении Learn Git Branching вы столкнётесь с демонстрацией способов перемещения по дереву коммитов.
1. HEAD
Суть в том, чтобы отделить HEAD
от ветки bugFix
и присвоить его последнему коммиту в этой же ветке:
git checkout C4
2. Относительные ссылки: ^
Перемещаемся на первого родителя ветки bugFix
:
git checkout bugFix^
3. Оператор «~» и branch forcing
Именно на этой задаче у многих возникают проблемы, потому что схема выглядит весьма запутанной. Но чтобы осуществить перемещение, достаточно ввести в консоль Learn Git Branching такие команды:
git checkout C1 git branch -f main C6 git branch -f bugFix bugFix~3
4. Отмена изменений в Git
Здесь просто отменяем изменения локально и удалённо. Поскольку изначально мы находимся на локальной ветке (она отмечена звёздочкой), то и начинаем с неё:
git reset HEAD~1 git checkout pushed git revert HEAD
Перемещаем труды туда-сюда
Теперь речь пойдёт о перемещении изменений — возможности, позволяющей разработчику сказать «Хочу, чтобы эти изменения были вот тут, а вот эти — вон там» и получить точные, правильные результаты, не теряя при этом гибкости разработки.
1. Git cherry-pick
Здесь нужно перенести копии выбранных комитов в main
, что делается всего одной строкой:
git cherry-pick C3 C4 C7
2. Git interactive rebase
Это задача с использованием интерактивного окна для перемещения элементов. Для начала впишите код:
git rebase -i HEAD~4
Затем выделите и переставьте элементы в интерактивном окне Learn Git Branching следующим образом:
Сборная солянка
На этом прохождение основ в Learn Git Branching заканчивается, и дальше именно вы решаете, какую команду выбрать. Я просто приведу свои варианты решения задач из сборной солянки, но вы всегда можете воспользоваться другими.
1. Выберем один коммит
git checkout main git cherry-pick C4
2. Жонглируем коммитами
git rebase -i main git commit --amend -m "an updated commit message" git rebase -i main git branch -f main caption
3. Жонглируем коммитами №2
git checkout main git cherry-pick C2 git commit --amend -m "an updated commit message" git cherry-pick caption
4. Теги
git checkout C2 git tag v1 C2 git tag v0 C1
5. Git describe
git describe main git describe side git describe bugFixgit commit -m "Finish the task"
Продвинутый уровень
Вот мы и подошли к продвинутому уровню в прохождении Learn Git Branching.
1. Rebase на нескольких ветках
Перемещения здесь выглядят сложными, но на деле всё просто:
git rebase main bugFix git rebase bugFix side git rebase side another git rebase another main
2. Определение родителей
Решить можно в три, две и в одну команду. Сделаем в одну:
git branch bugWork HEAD~^2~
3. Спутанные ветки
Задание считается сложным, но достаточно просто абстрагироваться и вспомнить полезную команду git cherry-pick
:
git checkout one git cherry-pick C4 C3 C2 git checkout two git cherry-pick C5 C4 C3 C2 git branch -f three C2
Push & Pull
Теперь переходим к удалённым репозиториям. В этих ответах только код.
1. Введение в клонирование
git clone
2. Удалённые ветки в Git
git commit -m "First commit" git checkout o/main git commit -m "Second commit"
3. Git fetch
git fetch
4. Git pull
git pull
5. Коллективная работа
git clone git fakeTeamwork main 2 git commit -m "My commit" git pull
6. Git push
git commit -m "First commit" git commit -m "Second commit" git push
7. Когда наработки расходятся
git clone git fakeTeamwork git commit -m "My commit" git pull --rebase git push
8. Remote rejected
git reset --hard o/main git checkout -b feature C2 git push origin feature
Origin и Git remotes
Это завершающий этап прохождения интерактива Learn Git Branching, в котором, как и в предыдущем, содержится восемь заданий. Здесь я приведу только их решения.
1. Слияние фича-бранчей (веток)
git rebase side1 side2 git rebase side2 side3 git rebase side3 main git pull --rebase git push
2. Merge? Нет, нет, спасибо.
git checkout main git pull git merge side1 git merge side2 git merge side3 git push
3. Удалённые-отслеживаемые ветки
git checkout -b side o/main git commit -m "My commit" git pull --rebase git push
4. Аргументы команды push
git push origin main git push origin foo
5. Подробности аргумента <пункт назначения>
git push origin main~1:foo git push origin foo:main
6. Аргументы git fetch
git fetch origin main~1:foo git fetch origin foo:main git checkout foo git merge main
7. Странный <источник>
git push origin :foo git fetch origin :bar
8. Аргументы для pull
git pull origin bar:foo git pull origin main:side
Надеюсь, моё прохождение Learn Git Branching окажется полезным. Старайтесь проходить уровни самостоятельно, чтобы закреплять полученные знания, но если где-то застрянете — обращайтесь за помощью к этой шпаргалке.