--- title: "Гайд по работе с Git" date: 2019-03-26T08:47:11+01:00 draft: true --- ## Основные команды ### Клонирование репозитория `git clone git@github.com:<твой-никнейм>/<репозиторий>.git` После выполнения clone будет автоматически создан remote с названием origin с указанным url Для обновления форка необходимо добавить remote с апстримом. ### Добавление главного репозитория для обновления master ветки `git remote add upstream https://github.com/<имя>/<репозиторий>.git` ### Коммит последних изменений ``` git status # Посмотреть все текущие staged и unstaged изменения git add . # Сделать все unstaged изменения staged git commit # Сделать коммит с развёрнутым сообщением. При вызове из терминала # откроется какой-нибудь текстовый редактор, в котором можно # написать полное сообщение. При выходе из редактора коммит # делается с последним сохранённым сообщением. git commit -m "<сообщение>" # Добавить коммит с кратким сообщением ``` ### Сохранение текущих изменений Это необходимо для избежания лишних конфликтов во время merge/pull ``` git stash # Сохранить изменения в stash git stash list # Вывести все сохранённые изменения git stash pop # Достать последние изменения git stash pop 0 # Применить изменения под номером 0 git stash drop # Удалить изменения из стека ``` ### Обновление ветки из апстрима ``` git pull upstream master git pull upstream develop ``` ### Создание ветки под новое изменение `git checkout -b <тип фичи>/<краткое описание изменения>` ### Переключение на существующую ветку `git checkout <название ветки>` ### Объединение веток Внесение изменений из `<название ветки>` в текущую: `git merge <название ветки>` Если при создании пулл-реквеста появились конфликты, то следует сначала обновить master из апстрима, после чего внести полученные изменения в текущую ветку. ``` git stash # Сохранить текущие незакоммиченные изменения на этой ветке git checkout master git pull upstream master git checkout git merge master git stash pop # Заново применить изменения, сохранённые с помощью # команды git stash ``` ### Загрузка своих изменений на сервер ``` git push -u origin <название ветки> # При первой загрузке этой ветки git push # Во все последующие разы ``` ### Что нужно выяснить самому - Как выглядят конфликты и как их решать. - Как создать пулл реквест. ## Процесс работы с репозиторием Для разработки своей фичи следует сделать форк главного репозитория и после этого работать только со своей версией. После этого клонируешь свой форк и работаешь с ним. Также в склонированный репозиторий нужно добавить дополнительный remote под названием upstream (на самом деле название может быть любым), чтобы синхронизироваться с... апстримом. При начале работы над новой фичей создаётся новая ветка (именованная по указанным в основном документе правилам). **Новая ветка создаётся на основе develop, а не master**. В неё делаются какие-то коммиты. Когда работа над фичей завершена, необходимо перейти на develop ветку **форка** и синхронизировать её с апстримом: `git pull upstream develop`. После этого нужно выполнить слияние ветки с фичей и master и решить все возникшие конфликты. Только после этого делается Pull Request в главный репозиторий. Ветка источник --- ветка с фичей, ветка приёмник --- develop ветка в главном репозитории. В случае, если снова возникли конфликты --- переходим к предыдущему параграфу. Если же всё хорошо и есть возможность автоматического слияния, то нужно указать Reviewers чтобы кто-то мог разобрать по частям тобою написанное. Когда пулл реквест принят и слит в develop, переходишь к своему локальному репозиторию и снова синхронизируешься с апстримом. После этого можно приступать к разработке новой фичи.