SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
GITСистема контроля версий
Вспомним
1. Git - распределенная СКВ
2. Запись в репозиторий - commit
3. Синхронизация удаленного и локального
репозиториев - push, pull, fetch
Git репозиторий - всего
лишь директория .git
Удалить репозиторий -
удалить
директорию .git
Бэкап -
копирование .git
Анонс
1. Staging
2. Работа с коммитами
3. Ветки
4. Слияние веток
5. Stashing
6. Изменение истории
7. Решение конфликов
STAGINGЖизнь до коммита
Staging
1. Что добавлено в staging (git add), то будет
закоммичено (git commit)
2. git reset HEAD <file> - убрать файл из
staging area
3. git checkout -- <file> - вернуть файл к
начальному состоянию (то, что сейчас в HEAD)
Staging Advanced
1. git diff --staged - изменения, которые
пойдут в коммит
2. git reset --hard - переходим на коммит,
изменения пропадут
3. git reset --soft - переходим на коммит,
изменения добавятся в staging
Работа с коммитами
Забыли закоммитить?
git commit --amend
добавить к предыдущему
коммиту
Важно знать
1. Все, что было закоммичено, не потеряется
2. Атомарность коммита - это образ жизни
3. Комментарии к коммиту обязательны
ВЕТКИBranches
Правила ветвления
1. Одна ветка - одна фича/багфикс (если не влазит в
один коммит)
2. master всегда есть и в master всегда stable код
3. В dev ветке идет разработка (периодически в нее
сливаются фичер-ветки)
4. dev периодически вливается в мастер, после код-
ревью
Управление бранчами
1. git checkout -b <name> - создать новый
бранч и переключиться на него
2. git branch -d <name> - удалить бранч (-D -
силой)
3. git push origin :<name> - удалить remote
бранч
4. git remote show origin - посмотреть бранчи
на remote
СЛИЯНИЕветок
Notes
1. Merge - это не боль
2. Rebase - это еще больше не боль
3. Чаще мерджим (ребэйсим) - легче жить
4. Важно не забывать переключаться между
бранчами
merge или rebase
1. merge создает дополнительный merge-коммит
слияния
2. rebase делает историю "плоской", как будто
коммиты были всегда в одном бранче
Как работает rebase
1. Переносит все коммиты из master, которых нет в
origin/master в temp
2. Выстраивает последовательно все коммиты,
которые в origin/master, в локальном master
3. За этими коммитами выстраивает те, которые в
temp
Например, есть бранч admin и бранч master
1. Переключается на admin
2. git rebase master - добавляем коммиты из
master в admin
3. Переключаемся на master - git checkout
master
4. git merge admin - не будет мердж коммитов,
т.к. это простой fast-forward
Например, несколько людей работали над одним
бранчем
1. git fetch - синхронизируем репозиторий
2. git rebase - начинаем rebase
3. Разруливаем конфликты, делаем git add на
файлы, в которых разрулили
4. git rebase --continue - завершаем rebase
В итоге никаких merge коммитов
Интерактивный rebase
git rebase -i HEAD~3 - rebase над 3 последними коммитами
1. Интерактивный rebase открывает rebase скрипт
2. Все коммиты, указанные в команде
перемещаются в temp
3. На коммиты в temp применяется rebase скрипт
Зачем?
1. Менять коммиты местами (перестановка pick
строк в скрипте)
2. Изменять комментарии к коммитам (edit)
3. Разбивать коммиты на несколько (edit)
4. Объединять коммиты в один (squash)
STASH
Git stash - место, куда временно можно положить
изменения, чтобы в будущем их применить.
— git stash list - посмотреть весь стек стеша
— git stash - сохранить в стеш
— git stash pop - применить изменения из стеша
— git stash --keep-index - все, кроме staging
— git stash --include-untracked
— git stash <branch> <stash> - создать из
стеша новый бранч
Изменение истории
1. Очень опасно
2. Иногда необходимо
3. Перед изменением истории всегда делать бекап
Фильтрация бранчей
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 - быстрее, но надо
пользоваться в качестве команд гитовыми
командами
Решение конфликтов
1. Используйте тулы вашей IDE: Xcode, IDEA - они
умеют 3-way merge делать
2. Хотя бы настройте стандартный для OSX
FileMerge в качестве mergetool (difftool)
3. Если же нет, то результат diff - сверху то, что было,
снизу то, что приехало (с чем мерджим)
После rebase не пушится
git push --force origin
master
Очень редко, но можно сделать принудительный
пуш, если уверены, что не надо мерджить
Git - распределенная система контроля версий

Contenu connexe

Tendances

Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 
загрузка Linux
загрузка Linuxзагрузка Linux
загрузка Linux
Paul Serikov
 
Организация хранилища с Vast sky (Дмитрий Лоханский)
Организация хранилища с Vast sky (Дмитрий Лоханский)Организация хранилища с Vast sky (Дмитрий Лоханский)
Организация хранилища с Vast sky (Дмитрий Лоханский)
Ontico
 
2009 Inquisitor 3
2009 Inquisitor 32009 Inquisitor 3
2009 Inquisitor 3
Liudmila Li
 
Операционные системы
Операционные системыОперационные системы
Операционные системы
yaevents
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3
Technopark
 
Операционная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционированиеОперационная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционирование
yaevents
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПО
Daria Oreshkina
 
kranonit S04E01 Антон: Защита от Master Boot Record Locker
kranonit S04E01 Антон: Защита от Master Boot Record Lockerkranonit S04E01 Антон: Защита от Master Boot Record Locker
kranonit S04E01 Антон: Защита от Master Boot Record Locker
Krivoy Rog IT Community
 

Tendances (18)

openSUSE Build Server от Б до Ю
openSUSE Build Server от Б до ЮopenSUSE Build Server от Б до Ю
openSUSE Build Server от Б до Ю
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
загрузка Linux
загрузка Linuxзагрузка Linux
загрузка Linux
 
Организация хранилища с Vast sky (Дмитрий Лоханский)
Организация хранилища с Vast sky (Дмитрий Лоханский)Организация хранилища с Vast sky (Дмитрий Лоханский)
Организация хранилища с Vast sky (Дмитрий Лоханский)
 
2009 Inquisitor 3
2009 Inquisitor 32009 Inquisitor 3
2009 Inquisitor 3
 
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной сб...
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной   сб...Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной   сб...
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной сб...
 
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
 
Git basis
Git basisGit basis
Git basis
 
Операционные системы
Операционные системыОперационные системы
Операционные системы
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3
 
Операционная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционированиеОперационная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционирование
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПО
 
kranonit S04E01 Антон: Защита от Master Boot Record Locker
kranonit S04E01 Антон: Защита от Master Boot Record Lockerkranonit S04E01 Антон: Защита от Master Boot Record Locker
kranonit S04E01 Антон: Защита от Master Boot Record Locker
 
Mercurial
MercurialMercurial
Mercurial
 
Krizhanovsky Vm
Krizhanovsky VmKrizhanovsky Vm
Krizhanovsky Vm
 
Gost 16293 89
Gost 16293 89Gost 16293 89
Gost 16293 89
 
Shell for developers
Shell for developersShell for developers
Shell for developers
 

En vedette

Derby watch sponsorship
Derby watch sponsorshipDerby watch sponsorship
Derby watch sponsorship
nmurphy1894
 
In what ways does your media product use, develop or challenge forms and conv...
In what ways does your media product use, develop or challenge forms and conv...In what ways does your media product use, develop or challenge forms and conv...
In what ways does your media product use, develop or challenge forms and conv...
JodieNiamh287
 
Technology in the classroom
Technology in the classroomTechnology in the classroom
Technology in the classroom
devpae
 
Katalog produk-agilent-technologies-tridinamika
Katalog produk-agilent-technologies-tridinamikaKatalog produk-agilent-technologies-tridinamika
Katalog produk-agilent-technologies-tridinamika
PT. Tridinamika Jaya Instrument
 
Vision Mobile vs. NetSupport School Classroom Management software
Vision Mobile vs. NetSupport School Classroom Management softwareVision Mobile vs. NetSupport School Classroom Management software
Vision Mobile vs. NetSupport School Classroom Management software
Amy Bilski Arredondo
 
毕业论文-赵世阳(0810020101)
毕业论文-赵世阳(0810020101)毕业论文-赵世阳(0810020101)
毕业论文-赵世阳(0810020101)
Shiyang Zhao
 

En vedette (16)

Mechanic cover letter
Mechanic cover letterMechanic cover letter
Mechanic cover letter
 
Clay Springer Soft Skills RestonLuncheon Presentation 15 Jan 14
Clay Springer Soft Skills RestonLuncheon Presentation 15 Jan 14Clay Springer Soft Skills RestonLuncheon Presentation 15 Jan 14
Clay Springer Soft Skills RestonLuncheon Presentation 15 Jan 14
 
vim
vimvim
vim
 
Media question 2 1
Media question 2 1Media question 2 1
Media question 2 1
 
Derby watch sponsorship
Derby watch sponsorshipDerby watch sponsorship
Derby watch sponsorship
 
In what ways does your media product use, develop or challenge forms and conv...
In what ways does your media product use, develop or challenge forms and conv...In what ways does your media product use, develop or challenge forms and conv...
In what ways does your media product use, develop or challenge forms and conv...
 
CONALEP
CONALEPCONALEP
CONALEP
 
Katalog fluke-industrial-thermal-imagers
Katalog fluke-industrial-thermal-imagersKatalog fluke-industrial-thermal-imagers
Katalog fluke-industrial-thermal-imagers
 
Technology in the classroom
Technology in the classroomTechnology in the classroom
Technology in the classroom
 
Katalog produk-agilent-technologies-tridinamika
Katalog produk-agilent-technologies-tridinamikaKatalog produk-agilent-technologies-tridinamika
Katalog produk-agilent-technologies-tridinamika
 
Vision Mobile vs. NetSupport School Classroom Management software
Vision Mobile vs. NetSupport School Classroom Management softwareVision Mobile vs. NetSupport School Classroom Management software
Vision Mobile vs. NetSupport School Classroom Management software
 
Chinese Calendar - 2013
Chinese Calendar - 2013Chinese Calendar - 2013
Chinese Calendar - 2013
 
Desvios viales, obras de Gral.Santos y Aviadores del Chaco.
Desvios viales, obras de Gral.Santos y Aviadores del Chaco.Desvios viales, obras de Gral.Santos y Aviadores del Chaco.
Desvios viales, obras de Gral.Santos y Aviadores del Chaco.
 
Katalog siglent-handheld-digital-oscilloscope-shs1000-series-tridinamika
Katalog siglent-handheld-digital-oscilloscope-shs1000-series-tridinamikaKatalog siglent-handheld-digital-oscilloscope-shs1000-series-tridinamika
Katalog siglent-handheld-digital-oscilloscope-shs1000-series-tridinamika
 
毕业论文-赵世阳(0810020101)
毕业论文-赵世阳(0810020101)毕业论文-赵世阳(0810020101)
毕业论文-赵世阳(0810020101)
 
Bài tập hóa đại cương i
Bài tập hóa đại cương iBài tập hóa đại cương i
Bài tập hóa đại cương i
 

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

Переход на Git из Subversion
Переход на Git из SubversionПереход на Git из Subversion
Переход на Git из Subversion
Mikhail Vasilyev
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающих
Ivan Evtukhovich
 
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
Владимир Кожаев
 
Git для новичков
Git для новичковGit для новичков
Git для новичков
Softline
 
Антон Шумихин - Redmin&Git
Антон Шумихин - Redmin&GitАнтон Шумихин - Redmin&Git
Антон Шумихин - Redmin&Git
GAiN@ESD
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git
phpdevby
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью GitКак удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git
phpdevby
 

Similaire à Git - распределенная система контроля версий (20)

Переход на Git из Subversion
Переход на Git из SubversionПереход на Git из Subversion
Переход на Git из Subversion
 
Git presentation
Git presentationGit presentation
Git presentation
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающих
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)
 
Git intro
Git introGit intro
Git intro
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
 
Приручаем Git
Приручаем GitПриручаем Git
Приручаем Git
 
Chebit.Git
Chebit.GitChebit.Git
Chebit.Git
 
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
 
Git для новичков
Git для новичковGit для новичков
Git для новичков
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
Git for you
Git for youGit for you
Git for you
 
Git
GitGit
Git
 
Антон Шумихин - Redmin&Git
Антон Шумихин - Redmin&GitАнтон Шумихин - Redmin&Git
Антон Шумихин - Redmin&Git
 
Giflow
GiflowGiflow
Giflow
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git
 
Как удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью GitКак удержать проект от анархии с помощью Git
Как удержать проект от анархии с помощью Git
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
 
Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере git
 

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

  • 2. Вспомним 1. Git - распределенная СКВ 2. Запись в репозиторий - commit 3. Синхронизация удаленного и локального репозиториев - push, pull, fetch
  • 3. Git репозиторий - всего лишь директория .git Удалить репозиторий - удалить директорию .git Бэкап - копирование .git
  • 4. Анонс 1. Staging 2. Работа с коммитами 3. Ветки 4. Слияние веток 5. Stashing 6. Изменение истории 7. Решение конфликов
  • 6.
  • 7. Staging 1. Что добавлено в staging (git add), то будет закоммичено (git commit) 2. git reset HEAD <file> - убрать файл из staging area 3. git checkout -- <file> - вернуть файл к начальному состоянию (то, что сейчас в HEAD)
  • 8. Staging Advanced 1. git diff --staged - изменения, которые пойдут в коммит 2. git reset --hard - переходим на коммит, изменения пропадут 3. git reset --soft - переходим на коммит, изменения добавятся в staging
  • 10. Забыли закоммитить? git commit --amend добавить к предыдущему коммиту
  • 11. Важно знать 1. Все, что было закоммичено, не потеряется 2. Атомарность коммита - это образ жизни 3. Комментарии к коммиту обязательны
  • 13. Правила ветвления 1. Одна ветка - одна фича/багфикс (если не влазит в один коммит) 2. master всегда есть и в master всегда stable код 3. В dev ветке идет разработка (периодически в нее сливаются фичер-ветки) 4. dev периодически вливается в мастер, после код- ревью
  • 14. Управление бранчами 1. git checkout -b <name> - создать новый бранч и переключиться на него 2. git branch -d <name> - удалить бранч (-D - силой) 3. git push origin :<name> - удалить remote бранч 4. git remote show origin - посмотреть бранчи на remote
  • 16. Notes 1. Merge - это не боль 2. Rebase - это еще больше не боль 3. Чаще мерджим (ребэйсим) - легче жить 4. Важно не забывать переключаться между бранчами
  • 17. merge или rebase 1. merge создает дополнительный merge-коммит слияния 2. rebase делает историю "плоской", как будто коммиты были всегда в одном бранче
  • 18. Как работает rebase 1. Переносит все коммиты из master, которых нет в origin/master в temp 2. Выстраивает последовательно все коммиты, которые в origin/master, в локальном master 3. За этими коммитами выстраивает те, которые в temp
  • 19. Например, есть бранч admin и бранч master 1. Переключается на admin 2. git rebase master - добавляем коммиты из master в admin 3. Переключаемся на master - git checkout master 4. git merge admin - не будет мердж коммитов, т.к. это простой fast-forward
  • 20. Например, несколько людей работали над одним бранчем 1. git fetch - синхронизируем репозиторий 2. git rebase - начинаем rebase 3. Разруливаем конфликты, делаем git add на файлы, в которых разрулили 4. git rebase --continue - завершаем rebase В итоге никаких merge коммитов
  • 21. Интерактивный rebase git rebase -i HEAD~3 - rebase над 3 последними коммитами 1. Интерактивный rebase открывает rebase скрипт 2. Все коммиты, указанные в команде перемещаются в temp 3. На коммиты в temp применяется rebase скрипт
  • 22. Зачем? 1. Менять коммиты местами (перестановка pick строк в скрипте) 2. Изменять комментарии к коммитам (edit) 3. Разбивать коммиты на несколько (edit) 4. Объединять коммиты в один (squash)
  • 23. STASH
  • 24. Git stash - место, куда временно можно положить изменения, чтобы в будущем их применить. — git stash list - посмотреть весь стек стеша — git stash - сохранить в стеш — git stash pop - применить изменения из стеша — git stash --keep-index - все, кроме staging — git stash --include-untracked — git stash <branch> <stash> - создать из стеша новый бранч
  • 25. Изменение истории 1. Очень опасно 2. Иногда необходимо 3. Перед изменением истории всегда делать бекап
  • 26. Фильтрация бранчей 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 - быстрее, но надо пользоваться в качестве команд гитовыми командами
  • 28. 1. Используйте тулы вашей IDE: Xcode, IDEA - они умеют 3-way merge делать 2. Хотя бы настройте стандартный для OSX FileMerge в качестве mergetool (difftool) 3. Если же нет, то результат diff - сверху то, что было, снизу то, что приехало (с чем мерджим)
  • 29. После rebase не пушится git push --force origin master Очень редко, но можно сделать принудительный пуш, если уверены, что не надо мерджить