/git-branch

Пошаговое описание работы с ветками для студентов интенсива HTML & CSS 2

Работа с ветками git в терминале, для выполнения домашних заданий на интенсиве HTML & CSS 2

Исходное состояние

В интерфейсе HTMLAcademy создаём репозиторий. Этот репозиторий (он же мастер-репозиторий), будет отправляться на итоговую проверку. Прямо вносить в него изменения нельзя, поэтому нужно создать себе форк (fork - вилка с английского), чтобы была возможность вносить изменения. Этот форк лежит на удаленном сервере у GitHub, и чтобы была возможность работать с ним у себя на компьютере мы должны сделать клон форка к себе на компьютер🤯

В итоге получается 3 репозитория:

  1. Удаленный (на сервере) мастер-репозиторий от Академии для защиты, в который прямо изменения вносить нельзя
  2. Удаленный форк мастера. Через него изменения отправляются в мастер-репозиторий через Pull Request.
  3. Локальный клон форка. Чтобы можно было работать на своем компьютере.

Выполнение заданий

Перед выполнением нового задания, первое, что нужно сделать - это создать новую ветку из ветки master.

Находясь в ветке master выполняем команду

$ git checkout -b module1-task1

Флаг -b команды checkout создает новую ветку под названием module1-task1 и тут же переключается на неё.
Если ввести команду git branch, то в консоли будут показаны все доступные ветки, текущая (выбранная) ветка будет с пометкой *

$ git branch
  master
 *module1-task1

Второе, выполняем работу по условию задания.

После завершения задания необходимо зафиксировать изменения - сделать коммит (коммиты можно делать и походу задания, а не один раз в конце задания).

Для этого нам надо проиндексировать изменения.

Командой git status можно посмотреть текущее состояние в ветке, а именно список с названиями изменённых файлов, если они есть, и те, которые ожидают записи и сохранения (обычно они выделены красным цветом).

git status

Из сообщения команды видно, что файл Readme.md модифицирован, но не проиндексирован для коммита.

Для того, чтобы проиндексировать изменения нужно воспользоваться командой git add имя-файла. После этой команды файл будет уже зеленым цветом (если снова ввести git status).

В дальнейшем, когда будет много изменений, проще ввести git add . или git add -A. Эта команда проиндексирует все изменения, которые были с момента последнего коммита.

Файлы готовы для коммита, поэтому командой git commit -m "Текст коммита" делаем коммит.

Коммит сделан, но пока он находится только на локальной машине, а нам надо его отправить в форк, чтобы в дальнейшем предложить Pull Request.

Для того, чтобы отправить воспользуемся командой git push. Так же в этой команде нам надо указать куда мы отправляем и в какую ветку.
Если ввести команду git remote консоль покажет все доступные удаленные репозитории. По умолчанию там будет один репозиторий - origin. Это название по умолчанию для нашего форка. В него то нам и надо отправить изменения.

git push origin module1-task1

Если дословно, то отправь изменения в форк (origin) в ветку module1-task1 (если такой ветки нет в форке, git создаст её)

Заходим в форк на GitHub и видим, что ветка появилась. Но в ветке master изменений нет. Все верно, поскольку мы работали в ветке module1-task, там-то изменения как раз есть.

Ветка master: Ветка master

Ветка module1-task1: Ветка module1-task1

Теперь создаем Pull Request из ветки module1-task1 нашего форка в master ветку нашего мастер-репозитория (академии). Pull Request

Задание принято

После того, как задание принято - статус Pull Request становится merged - "слитый"

merged

К этому моменту мы имеем:

  1. Мастер-репозиторий в актуальном состоянии
  2. Ветка master форка в неактуальном состоянии, в актуальном состоянии у нас только ветка module1-task1 форка.

Следующая задача - актуализировать ветку master нашего форка, чтобы в дальнейшем создать новую ветку module2-task1 например, от ветки master и чтобы новая ветка была в актуальном состоянии.

В удаленный форк мы пушим изменения из локального репозитория, поэтому сперва актуализируем его:

  1. Переключаемся на ветку master (её же актуализируем) командой git checkout master
  2. Далее командой git pull нам надо подтянуть изменения из мастер-репозитория. Здесь git возможно скажет, что не знает откуда ему тянуть, поэтому нам надо добавить этот репозиторий. Добавляем удаленный репозиторий, куда git будет обращаться, командой
git remote add academy git@github.com:htmlacademy-adaptive/1123257-mishka-22.git

Здесь мы добавляем (add) удаленный (remote) репозиторий под названием, к которому потом будем обращаться (academy) и ссылку по ssh

3. Теперь если выполнить команду git remote, консоль покажет доступные удаленные репозитории и их там будет уже два:

$ git remote
  academy
  origin
  1. Теперь можем забирать изменения из мастер-репозитория (academy)
git pull academy master

Здесь же опять указываем откуда забирать изменения (из master ветки мастер-репозитория academy)

Этими действиями мы актуализировали наш клон нашего форка. Осталось актуализировать сам форк - удаленный репозиторий. Делаем это по аналогии как отправляли изменения:

git push origin master

Если дословно, то отправь изменения в форк (origin) в ветку master.

Всё, на этом работа с заданием завершена✨🧙‍♂️

Приступая к новому заданию, мы создаем новую ветку и далее по порядку.

Резюмируя шаги, можно написать пошаговую инструкцию перед выполнением нового задания:

  1. Создаем новую ветку из ветки master
git checkout -b имя-ветки
  1. Выполняем задание
  2. Индексируем файлы
git add .
  1. Делаем коммит
git commit -m "Текст коммита"
  1. Отправляем в форк
git push origin имя-ветки
  1. Создаем Pull Request
  2. Правим его, по необходимости
  3. После принятия Pull Request актуализируем все репозитории:
    Переключаемся на master ветку
git checkout master
  1. Подтягиваем изменения
git pull academy master
  1. Отправляем их в свой форк
git push origin master
  1. Наслаждаемся жизнью😌