30
GIT Система контроля версий

Git - распределенная система контроля версий

Embed Size (px)

DESCRIPTION

Git - распределенная система контроля версий. Tips&tricks.

Citation preview

Page 1: Git - распределенная система контроля версий

GITСистема контроля версий

Page 2: Git - распределенная система контроля версий

Вспомним

1. Git - распределенная СКВ

2. Запись в репозиторий - commit

3. Синхронизация удаленного и локального репозиториев - push, pull, fetch

Page 3: Git - распределенная система контроля версий

Git репозиторий - всего лишь директория .git

Удалить репозиторий - удалить директорию .git

Бэкап - копирование .git

Page 4: Git - распределенная система контроля версий

Анонс

1. Staging

2. Работа с коммитами

3. Ветки

4. Слияние веток

5. Stashing

6. Изменение истории

7. Решение конфликов

Page 5: Git - распределенная система контроля версий

STAGINGЖизнь до коммита

Page 6: Git - распределенная система контроля версий
Page 7: Git - распределенная система контроля версий

Staging

1. Что добавлено в staging (git add), то будет закоммичено (git commit)

2. git reset HEAD <file> - убрать файл из staging area

3. git checkout -- <file> - вернуть файл к начальному состоянию (то, что сейчас в HEAD)

Page 8: Git - распределенная система контроля версий

Staging Advanced1. git diff --staged - изменения, которые пойдут в коммит

2. git reset --hard - переходим на коммит, изменения пропадут

3. git reset --soft - переходим на коммит, изменения добавятся в staging

Page 9: Git - распределенная система контроля версий

Работа с коммитами

Page 10: Git - распределенная система контроля версий

Забыли закоммитить?

git commit --amend добавить к предыдущему коммиту

Page 11: Git - распределенная система контроля версий

Важно знать1. Все, что было закоммичено, не потеряется

2. Атомарность коммита - это образ жизни

3. Комментарии к коммиту обязательны

Page 12: Git - распределенная система контроля версий

ВЕТКИBranches

Page 13: Git - распределенная система контроля версий

Правила ветвления

1. Одна ветка - одна фича/багфикс (если не влазит в один коммит)

2. master всегда есть и в master всегда stable код

3. В dev ветке идет разработка (периодически в нее сливаются фичер-ветки)

4. dev периодически вливается в мастер, после код-ревью

Page 14: Git - распределенная система контроля версий

Управление бранчами

1. git checkout -b <name> - создать новый бранч и переключиться на него

2. git branch -d <name> - удалить бранч (-D - силой)

3. git push origin :<name> - удалить remote бранч

4. git remote show origin - посмотреть бранчи на remote

Page 15: Git - распределенная система контроля версий

СЛИЯНИЕветок

Page 16: Git - распределенная система контроля версий

Notes

1. Merge - это не боль

2. Rebase - это еще больше не боль

3. Чаще мерджим (ребэйсим) - легче жить

4. Важно не забывать переключаться между бранчами

Page 17: Git - распределенная система контроля версий

merge или rebase1. merge создает дополнительный merge-коммит слияния

2. rebase делает историю "плоской", как будто коммиты были всегда в одном бранче

Page 18: Git - распределенная система контроля версий

Как работает rebase

1. Переносит все коммиты из master, которых нет в origin/master в temp

2. Выстраивает последовательно все коммиты, которые в origin/master, в локальном master

3. За этими коммитами выстраивает те, которые в temp

Page 19: Git - распределенная система контроля версий

Например, есть бранч admin и бранч master

1. Переключается на admin

2. git rebase master - добавляем коммиты из master в admin

3. Переключаемся на master - git checkout master

4. git merge admin - не будет мердж коммитов, т.к. это простой fast-forward

Page 20: Git - распределенная система контроля версий

Например, несколько людей работали над одним бранчем

1. git fetch - синхронизируем репозиторий

2. git rebase - начинаем rebase

3. Разруливаем конфликты, делаем git add на файлы, в которых разрулили

4. git rebase --continue - завершаем rebase

В итоге никаких merge коммитов

Page 21: Git - распределенная система контроля версий

Интерактивный rebasegit rebase -i HEAD~3 - rebase над 3 последними коммитами

1. Интерактивный rebase открывает rebase скрипт

2. Все коммиты, указанные в команде перемещаются в temp

3. На коммиты в temp применяется rebase скрипт

Page 22: Git - распределенная система контроля версий

Зачем?

1. Менять коммиты местами (перестановка pick строк в скрипте)

2. Изменять комментарии к коммитам (edit)

3. Разбивать коммиты на несколько (edit)

4. Объединять коммиты в один (squash)

Page 23: Git - распределенная система контроля версий

STASH

Page 24: Git - распределенная система контроля версий

Git stash - место, куда временно можно положить изменения, чтобы в будущем их применить.

— git stash list - посмотреть весь стек стеша

— git stash - сохранить в стеш

— git stash pop - применить изменения из стеша

— git stash --keep-index - все, кроме staging

— git stash --include-untracked

— git stash <branch> <stash> - создать из стеша новый бранч

Page 25: Git - распределенная система контроля версий

Изменение истории1. Очень опасно

2. Иногда необходимо

3. Перед изменением истории всегда делать бекап

Page 26: Git - распределенная система контроля версий

Фильтрация бранчей

1. git filter-branch --tree-filter 'rm -f test.txt' - перезапустит все коммиты, выполняя команду для tree-filter

2. git filter-branch --index-filter 'git rm --cached --ignore-unmatch test.txt' - работает только со staging - быстрее, но надо пользоваться в качестве команд гитовыми командами

Page 27: Git - распределенная система контроля версий

Решение конфликтов

Page 28: Git - распределенная система контроля версий

1. Используйте тулы вашей IDE: Xcode, IDEA - они умеют 3-way merge делать

2. Хотя бы настройте стандартный для OSX FileMerge в качестве mergetool (difftool)

3. Если же нет, то результат diff - сверху то, что было, снизу то, что приехало (с чем мерджим)

Page 29: Git - распределенная система контроля версий

После rebase не пушится

git push --force origin master

Очень редко, но можно сделать принудительный пуш, если уверены, что не надо мерджить

Page 30: Git - распределенная система контроля версий