Вы находитесь на странице: 1из 49

Git for true developer

О чем я это все


1. Разберемся что такое git и какие основные принципы работы с ним.

2. Посмотрим какие бывают workflow работы с branch в git.

3. Попробуем пройти путь по реальному JuJaLabs workflow.


Что такое git ?
1. Основные концепции git.
2. Основные команды add, commit, checkout.
3. Ветвление и команды branch, checkout, merge.
4. Remote git и основные команды remote, push, pull, fetch
5. Поговорим про github.

Скачать git клиент for - https://git-for-windows.github.io/

Для linux, пожалуйста гуглите, под свою OS.


Локальная система управления версиями
Система управления версиями с единым сервером

Ветка = копия всей структуры

Единый сервер = единая точка


отказа
Как храняться версии файлов
Распределенная система управления версиями

Нет единого сервера

Большинство операций
происходят локально

Стоимость ветки очень


мала

Есть сборка мусора


Как git хранит файлы
Что такое commit ?
Что такое snapshot
Где git держит свои файлы
Все настройки и файлы находятся в скрытой директории .git

Она появляется в момент инициализации нового или клонировании


существующего репозитория
Как в общем выглядит git репозиторий
Жизненный цикл git
Жизненный цикл файла в git
Основные команды: git status. Просмотр состояния git репозитория

Link to doc - https://git-scm.com/docs/git-status


Основные команды: git add. Добавление изменений в stage

Link to doc - https://git-scm.com/docs/git-add


Основные команды: git commit. Добавление нового commit

git commit -a -m “Commit message” - добавление всех изменений в stage


и создание нового commit с сообщением

Link to doc - https://git-scm.com/docs/git-commit


Как легко изменить последний commit
Всегда можно легко изменить последний commit

Для этого есть простая команда git commit --amend

C помощью этой команды можно изменить описание и добавить удалить


изменения в последний commit.

Забегая наперед, очень плохая идея изменять commit, который уже был
опубликован в удаленном репозитории
Как работает git commit --amend
Основные рекомендации к commit
1. Commit должен быть максимально атомарным и содержать близкие по
смыслу изменения
2. Сообщение должно быть максимально содержательным и описывать
изменения
3. Не нужно добавлять не работающий код или файлы которые можно
сгенерировать.
4. Не нужно добавлять бинарные файлы
5. Лучше использовать такую очередность: делаем feature в старом
исполнении, потом рефакторинг
6. Не нужно делать один большой commit со всем сразу. Необходимо
разбивать на мелкие части. Коллеги будут благодарны
Примеры сообщений к commit
Основные команды: git log. Просмотр истории commit

Link to doc - https://git-scm.com/docs/git-log


Основные команды: git checkout.
Отмена изменений в файле в working directory

Команда git checkout используется для копирования файлов из истории в


рабочую директорию. Также она может использоваться для переключения
между ветками.
Как работает git checkout для копирования файлов

Link to doc - https://git-scm.com/docs/git-checkout


Основные команды: git reset
Переносит и копирует состояние из commit в stage и/или working directory
Часто применяется для отмены изменений в stage
Что делает git reset с параметром в виде имени файла
git reset c commit и ключами

Указатель переноситься на нужный commit и в зависимости от ключей устанавливается


состояние stage and working directory
git reset без commit и указания файлов
Подведем итог:
Основы ветвления в git.

Branch - метка на определенный commit


Команды для работы с branch

1. Создание branch git branch <name> или git checkout -b <name>


2. Просмотр всех branch git branch (-a просмотр всех branch)
3. Удаление branch git branch -D <name>
4. Переименовать git branch -m old_branch new_branch

Link to doc - https://git-scm.com/docs/git-branch


Переключение между branch
Состояние Detach HEAD
Commit to Detach HEAD
Слияние двух веток по fast forward
Слияние двух веток без fast forward
Еще один вид слияния веток git rebase
Remote git все тоже самое + удаленный репозторий
Команда git remote
Основное назначение управлять настройками удаленных репозиториев

git remote -v

git remote set-url

git remote remove

Метки origin and upstream это стандартные общепринятые названия для


удаленных репозиториев. Их можно менять.
Link to doc - https://git-scm.com/docs/git-remote
Пример
Основные команды
1. git clone <url> - получить полную копию удаленного репозитория
2. git pull получить все изменения из удаленного репозитория и применить
к working directory
3. git push <name repo> <branch> отправить изменения на сервер
4. git fetch получить изменения, но не применять их к нашей копии

Link to doc:
https://git-scm.com/docs/git-pull
https://git-scm.com/docs/git-push
https://git-scm.com/docs/git-fetch
Разница между fetch и pull
https://github.com/
Single branch aka trunk
GitHub Flow

https://guides.github.com/introduction/flow/
A successful Git branching model

http://nvie.com/posts/a-successful-git-branching-model/
https://github.com/JujaLabs/docs/tree/master/other/workflow
Мы используем такой workflow + fork
Что добавили в JuJaLabs
Попробуем JujaLabs workflow на
практике

Оценить