OTUS_JavaPro_Git-21185-860594

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.

LIVE

13.

Практический пример (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 branch

18.

Смена рабочей ветки – git checkout

19.

Создание коммита – git commit

20.

Возврат в master – git checkout master

21.

Создание коммита – git commit

22.

Команды по работе с ветками
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.

LIVE

24.

Практический пример (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.

LIVE

33.

Практический пример (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.

Объединение состояний через merge

38.

Объединение состояний через rebase

39.

Объединение состояний через rebase

40.

Команды для перебазирования веток
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.

Более сложный rebase

42.

Более сложный rebase

43.

LIVE

44.

Практический пример (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.

LIVE

48.

Практический пример (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.

Добавили файл в stage

55.

Создали 1й коммит

56.

Отредактировали файл

57.

Отредактировали файл

58.

Добавили изменения в stage

59.

Создалил 2й коммит

60.

Изменили, stage, сделали 3й коммит

61.

Откатили только создание 3го коммита

62.

Откатили создание 3го коммита и stage

63.

Полностью откатили изменения

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.

LIVE

66.

Практический пример (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.

LIVE

71.

Практический пример
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.

Заполните, пожалуйста,
опрос о занятии
по ссылке в чате
English     Русский Правила