summaryrefslogtreecommitdiff
path: root/blog/git.md
diff options
context:
space:
mode:
Diffstat (limited to 'blog/git.md')
-rw-r--r--blog/git.md113
1 files changed, 113 insertions, 0 deletions
diff --git a/blog/git.md b/blog/git.md
new file mode 100644
index 0000000..20f1b73
--- /dev/null
+++ b/blog/git.md
@@ -0,0 +1,113 @@
+# Гайд по работе с Git
+
+## Основные команды
+- - -
+
+### Клонирование репозитория
+
+`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 <branch>
+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, переходишь к своему локальному
+репозиторию и снова синхронизируешься с апстримом. После этого можно приступать
+к разработке новой фичи.
+