Learn Git Branching — это интерактивный учебник по Git, направленный на закрепление теории прохождением наглядной практики. Если вы столкнулись с трудностью в процессе прохождения, выберите необходимый раздел, уровень и подсмотрите решение.
- Введение
- Едем дальше
- Перемещаем труды туда-сюда
- Сборная солянка
- Продвинутый уровень
- Push & Pull
- Origin и Git remotes
Введение
Прохождение Learn Git 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 окажется полезным. Старайтесь проходить уровни самостоятельно, чтобы закреплять полученные знания, но если где-то застрянете — обращайтесь за помощью к этой шпаргалке.
Держите больше шпаргалок по Git.