Similar presentations:
Java Developer. Professional. Углубленный разбор Git
1.
Java Developer.Professional
Углубленный разбор Git
otus.ru
2.
Проверить, идет ли записьМеня хорошо видно
& слышно?
Ставим “+”, если все хорошо
“-”, если есть проблемы
3.
Тема вебинараУглубленный разбор Git
Романов Александр
ИТ-лидер стрима в МТС, ex-Тинькофф, Сбер, Райффайзен
В java-разработке 6 лет. Ментор, коуч.
Знаю много секретов быстрого роста в IT.
Помогаю людям быть вне конкуренции, чтобы работать там, где хочется!
Мой Telegram-канал: @AlexProIT
4.
Маршрут вебинараОсновы
Ветвление
Слияние
Перебазирование
Решение конфликтов
Отмена изменений
Удаленный репозиторий
5.
Цели вебинараК концу занятия вы будете
1.
Знать команды для работы с Git.
2.
Понимать принцип работы Git.
3.
Уметь использовать Git при разработке ПО.
6.
Основы7.
Хранение данных в виде снимков8.
Первичная настройка1.
Производится после установки с использованием git config
2.
Системные настройки --system содержатся в /etc/gitconfig
3.
Пользовательские настройки --global содержатся в ~/.gitcinfig
4.
Проектные настройки содержатся в .gitcinfig/config
5.
Настройки след.уровня переопределяют настройки предыдущего.
6.
Базовые настройки:
git config --global user.name “<Name Surname>”
git config --global user.email <Email>
7.
Смотреть настройки текущего проекта:
git config --list
9.
Состояния файлов10.
Базовые команды1.
Инициализируем пустой репозиторий: git init
В результате создается скрытая директория .git
2.
Смотреть текущее состояние файлов: git status
3.
Добавить новый/измененный файл в stage: git add <File>
4.
Добавить все новые/измененные файлы в stage: git add .
5.
Для игнорирования файлов добавляем их в .gitignore
# комментарии – это игнорируется
*.а
# пропускать файлы, заканчивающиеся на .a
!lib.a
# но отслеживать файлы lib.a, несмотря на пропуск файлов *.a
build/
# игнорировать все файлы в папке /build
doc/*.txt
# игнорировать doc/notes.txt, но не doc/server/arch.txt
6.
Фиксировать изменения из stage: git commit –m ‘<Message>’
11.
Базовые команды7.
Фиксировать измененияс с авто-stage: git commit –a –m ‘<Message>’
Работает только файлов хотя бы 1 раз добавленных в stage!
8.
Удалить файл и убрать из stage: git rm <File>
Либо: rm <File> + git add/rm <File>
9.
Переименовать файл: git mv <From> <To>
Либо: mv <From> <To> + git rm/add <From> + git add <To>
10.
Смотреть дерево коммитов: git log --oneline --graph --decorate
--all
11.
Дописать в последний коммит: git commit --amend –m ‘<Message>’
12.
LIVE13.
Практический пример (1)1.
Инициализируем репозиторий: git init
2.
Создаем файл a.txt и добавляем в stage: git add .
3.
Создаем новый коммит: git commit –m ‘File a.txt added’
4.
Меняем файл a.txt и дописываем в предыдущий коммит: git commit -amend –m ‘File a.txt modified’
5.
Создаем файл b.txt, добавляем в stage и создаем новый коммит.
6.
Переименовываем файл b.txt -> bbb.txt: git mv b.txt bbb.txt
7.
Создаем коммит (добавление в stage не требуется).
8.
Удаляем файл bbb.txt: git rm b.bbb.txt
9.
Создаем коммит (добавление в stage не требуется).
14.
Вопросы?Ставим “+”,
если вопросы есть
Ставим “–”,
если вопросов нет
15.
Ветвление16.
Суть ветвления17.
Создание ветки – git branch18.
Смена рабочей ветки – git checkout19.
Создание коммита – git commit20.
Возврат в master – git checkout master21.
Создание коммита – git commit22.
Команды по работе с ветками1.
Создать ветку: git branch <Branch>
2.
Перейти в ветку: git checkout <Branch>
3.
Перейти в коммит: git checkout <CommitHash>
4.
Создать ветку с переходом в нее: git checkout –b <Branch>
5.
Удалить ветку: git branch –d <Branch>
6.
Переименовать текущую ветку: git branch –m <Branch>
23.
LIVE24.
Практический пример (2)1.
Инициализируем репозиторий: git init
2.
Создаем файл a.txt и добавляем в stage: git add .
3.
Создаем новый коммит: git commit –m ‘File a.txt added’
4.
То же самое делаем с файлами b.txt и c.txt.
5.
Создаем ветку testing и переходим в нее: git chechout –b testing
6.
Добавляем файл d.txt, добавляем в stage и создаем новый коммит.
7.
Переходим в ветку master: git checkout master
8.
Добавляем файл e.txt, добавляем в stage и создаем новый коммит.
25.
Вопросы?Ставим “+”,
если вопросы есть
Ставим “–”,
если вопросов нет
26.
Слияние27.
Влитие с быстрой перемоткой28.
Влитие с быстрой перемоткой29.
Влитие с коммитом слияния30.
Влитие с коммитом слияния31.
Команды для слияния веток1.
Влить ветку Src в Target: git merge <Src>
*Предварительно: git checkout <Target>
2.
Влить ветку без fast-forvard: git merge <Src> -–no-ff
32.
LIVE33.
Практический пример (3)1.
Инициализируем репозиторий: git init
2.
Последовательно создаем файлы a.txt, b.txt, c.txt, добавляем в stage и
создаем отдельный коммит на создание каждого файла в master.
3.
Создаем ветки hotfix и iss53.
4.
Переходим в ветку iss53, создаем файл d.txt, добавялем в stage и создаем
новый коммит.
5.
Переходим в ветку hotfix, создаем файл e.txt, добавляем в stage и создаем
новый коммит.
6.
Переходим в ветку назначения влития: git checkout hotfix
7.
Выполняем влитие ветки iss53: git merge iss53
34.
Вопросы?Ставим “+”,
если вопросы есть
Ставим “–”,
если вопросов нет
35.
Перебазирование36.
Исходное состояние веток37.
Объединение состояний через merge38.
Объединение состояний через rebase39.
Объединение состояний через rebase40.
Команды для перебазирования веток1.
Перебазировать ветку Src на Target: git rebase <Target>
*Предварительно: git checkout <Src>
2.
Сложное перебазирование: git rebase --onto <Targer> <Middle>
<Src>
*Из примера выше: : git rebase --onto master server client
3.
Перебазирование без привязки к ветке: git rebase <Target> <Src>
41.
Более сложный rebase42.
Более сложный rebase43.
LIVE44.
Практический пример (4)1.
Инициализируем репозиторий: git init
2.
Последовательно создаем файлы a.txt, b.txt, c.txt, добавляем в stage и
создаем отдельный коммит на создание каждого файла в master.
3.
Создаем ветку experiment, переходим в нее, создаем файл e.txt,
добавляем в stage и создаем коммит.
4.
Переходим в ветку master, создаем файл d.txt, добавляем в stage и
создаем коммит
5.
Переходим в перебазируемую ветку: git checkout experiment
6.
Выполняем перебазированиев ветки на master: git rebase master
45.
Вопросы?Ставим “+”,
если вопросы есть
Ставим “–”,
если вопросов нет
46.
Решение конфликтов47.
LIVE48.
Практический пример (5)1.
Инициализируем репозиторий: git init
2.
Создаем файлы a.txt и b.txt, добавляем в stage и создаем один коммит.
3.
Создаем ветки feature-a, feature-b, возвращаемся в ветку master.
4.
Переходим в ветку feature-a, добавляем в файл a.txt “AAA” первой строкой,
добавляем в stage и создаем коммит.
5.
Переходим в ветку feature-b, добавляем в файл b.txt “BBB” первой строкой,
добавляем в stage и создаем коммит.
6.
Добавляем в файлы a.txt и b.txt “- - - - -“ первой строкой, добавляем в stage
и создаем один коммит в ветку master.
7.
При попытке влить ветку feature-a в master получаем конфликт.
8.
При попытке перебазировать ветку feature-b на master получаем конфликт.
49.
Разрешаем конфликт влития1.
Переходим в ветку master: git checkout master
2.
Вливаем ветку feature-a в master: git merge feature-a
3.
Вручную редактируем файл a.txt и решаем конфликт.
4.
Добавляем изменения в stage: git add .
5.
Создаем коммит слияния: git commit –m ‘<Comment>’
50.
Разрешаем конфликт перебазирования1.
Переходим в ветку feature-b: git checkout feature-b
2.
Перебазируем ветку feature-b на master: git rebase master
3.
Вручную редактируем файл a.txt и решаем конфликт.
4.
Добавляем изменения в stage: git add .
5.
Продолжаем перебазирование: git rebase --continue
51.
Вопросы?Ставим “+”,
если вопросы есть
Ставим “–”,
если вопросов нет
52.
Отмена изменений53.
Добавили файл54.
Добавили файл в stage55.
Создали 1й коммит56.
Отредактировали файл57.
Отредактировали файл58.
Добавили изменения в stage59.
Создалил 2й коммит60.
Изменили, stage, сделали 3й коммит61.
Откатили только создание 3го коммита62.
Откатили создание 3го коммита и stage63.
Полностью откатили изменения64.
Команды отката1.
Откат состояния репозитория: git reset [option] HEAD~
2.
Только откатить коммит, оставить stage и рабочую директорию: --soft
3.
Откатить коммит и stage, оставить рабочую директорию: --mixed
4.
Откатить коммит, stage и рабочую директорию: --hard
5.
Откат к предыдущему коммиту: HEAD~
6.
Откат на N коммитов разад: HEAD~N
*Например, откат на 2 коммита назад: HEAD~2
65.
LIVE66.
Практический пример (5)1.
Инициализируем репозиторий: git init
2.
Последовательно создаем файлы a.txt, b.txt, c.txt, d.txt, добавляем в stage и
создаем отдельный коммит на создание каждого файла в master.
3.
Откатываем только 1 коммит: git reset --soft HEAD~1
4.
Создаем 1 коммит обратно.
5.
Откатываем 1 коммит и stage: git reset --mixed HEAD~1
6.
Добавляем в stage и создаем 1 коммит обратно.
7.
Полный откат измений последнего коммита: git reset --hard HEAD~1
8.
Откатываем только 2 коммита: git reset --soft HEAD~2
9.
Создаем 1 коммит обратно вместо 2х.
67.
Вопросы?Ставим “+”,
если вопросы есть
Ставим “–”,
если вопросов нет
68.
Удаленныйрепозиторий
69.
Команды работы с удаленным репо.1.
Склонировать из удаленного репозитория: git clone <Url>
2.
Смотреть список удаленных репозиториев c URL: git remote -v
3.
Добавить удаленнй репозиторий: git remote add <Name> <Url>
4.
Отправить данные в удаленнй репозиторий: git push <Name> <Branch>
5.
Получить данные из удаленного репозитория: git fetch <Name>
6.
Обновить локальную ветку из удаленного репозитория: git pull <Name>
70.
LIVE71.
Практический пример1.
Инициализируем репозиторий: git init
2.
Создаем файл a.txt, добавляем в stage, создаем новый коммит.
3.
Добавляем удаленный репозиторий: git remote add origin <Url>
4.
Отправляем ветку master в удаленный репозиторий: git push origin
master
5.
Клонируем удаленный репозиторий: git clone <Url>
6.
Создаем файл b.txt, добавляем в stage, создаем новый коммит.
7.
Отправляем изменения в удаленный репозиторий: git push origin
master
8.
Получаем изменения из удаленного репозитория: git fetch
9.
Мержим ветку origin/master в master.
72.
Вопросы?Ставим “+”,
если вопросы есть
Ставим “–”,
если вопросов нет
73.
Рефлексия74.
Цели вебинараПроверка достижения целей
1.
Узнали команды для работы с Git.
2.
Поняли принцип работы Git.
3.
Научились использовать Git при разработке ПО.
75.
Заполните, пожалуйста,опрос о занятии
по ссылке в чате