Содержание
- 2. Мотивация
- 3. Единое место хранения кода Удобное объединение изменений от разных разработчиков История изменений с описанием и авторством
- 4. А зачем система контроля версий вам?
- 5. Систем контроля версий море… CVS SVN Git Perforce TFS Fossil Bazaar Mercurial Veracity
- 6. Распределенная Каждому по репозиторию Консольная Состоит из утилит командной строки Кроссплатформенная Много разных GUI Поддерживается хостингами
- 7. А кто уже пользовался Git? А другой системой контроля версий?
- 8. Как будем изучать?
- 9. GUIов много, на любой вкус и цвет, каждый со своими особенностями, а придется что-то выбрать Как
- 10. Примеры GUI на Git Extensions Тонкая надстройка над консолью с минимумом магии Удобные команды, управление с
- 11. Задания на Git Bash + Git Graph для Linux, Maс или Windows Как будем изучать? Задания
- 12. VS Code для разрешения конфликтов Показывает конфликт он как есть Подсветка конфликта, кнопки быстрых действий Подсвечивает
- 13. VS Code для редактирования Подсвечивает Markdown Умеет открывать папку Как будем изучать?
- 14. Особенностей и нюансов много, а времени мало Если освоить правила, в нюансах легко разобраться Сформулируем 10
- 15. Формат Правило и теория к нему Практические задания Синхронизация А потом много практики в реальной жизни,
- 16. S1. Все локально A1. Трехсторонний merge в три шага R2. Удаленное изменение — это push A2.
- 17. H1. Гибкое конфигурирование и качественная документация Гибкая настройка под любой процесс Документация ко всем командам Алиасы
- 18. Конфигурируется под команду и продукт У команд Git множество опций Поведение команд по умолчанию можно настраивать
- 19. Git должен знать, кто вносит изменения: git config --global user.name "John Doe" git config --global user.email
- 20. git help commit git commit --help git commit -h Чтобы не запоминать все опции команд! Git
- 21. Подсказки при неверных командах Полезно читать вывод хотя бы при освоении Git!
- 22. Полная запись: git branch --delete awesome-feature Короткая запись: git branch -d awesome-feature Полная усиленная запись: git
- 23. Через .gitconfig [alias] it = !git init && git commit -m 'Initial commit' --allow-empty st =
- 24. Через .gitconfig [core] autocrlf = true safecrlf = true Через команды git config --global core.autocrlf true
- 25. Через .gitconfig [core] autocrlf = input Через команды git config --global core.autocrlf input Даже если получено
- 26. Сохранять в репозиторий нужно только исходные файлы! Остальное — в игнор!
- 27. В любой папке и ее подпапках .gitignore Через .gitconfig [core] excludesFile Дополнительно в репозитории /.git/info/exclude Коллекция
- 28. H1. Гибкое конфигурирование и качественная документация Structure Actions Remote
- 29. S1. Все локально Все данные хранятся в локальных репозиториях, изменения между ними можно синхронизировать
- 30. Репозиторий – хранилище кода со всей историей изменений git init – создать репозиторий для папки Репозиторий
- 31. Клонирование Чтобы работать над существующим проектом надо скопировать репозиторий локально – склонировать git clone – склонировать
- 32. Fork на GitHub GitHub
- 33. Fork на GitHub Сделать форк
- 34. Bare-репозиторий — репозиторий без рабочей директории git init --bare – создать bare-репозиторий Обычно называется reponame.git, например
- 35. Задание 1. Init Repo Задание 2. Fork and Config
- 36. S1. Все локально H1. Гибкое конфигурирование и качественная документация Structure Actions Remote
- 37. S2. Хранятся состояния директории, постепенная сборка коммита Хранятся файлы, разница вычисляется на лету Commit index для
- 38. «Снимки» директории Working directory
- 39. Сохранение состояния Working directory
- 40. Еще сохранения Working directory
- 41. Загрузка состояния Working directory
- 42. Альтернативная ветка истории Working directory
- 43. Метаинформация Хэш-коммита Сообщение Информацию об авторе Время Родитель Данные Полное состояние директории Изменения по сравнению с
- 44. Метаинформация коммита
- 45. Полное состояние директории
- 46. Изменения по сравнению с родителем
- 47. Каждый коммит хранит структуру каталога и все файлы состояния директории Хранение файлов оптимизировано: файлы не хранятся
- 48. Working directory & Commit index Последний коммит Working directory
- 49. Working directory & Commit index Последний коммит Commit index = Staging area Working directory Для постепенной
- 50. Working directory & Commit index
- 51. Внесение изменений Working directory Commit index Последний коммит
- 52. Внесение изменений Working directory Commit index Последний коммит Редактирование
- 53. Внесение изменений Working directory Commit index Последний коммит git add init.md
- 54. Внесение изменений Working directory Commit index Последний коммит Редактирование
- 55. Working directory changes Commit index changes
- 56. Внесение изменений Working directory Commit index Последний коммит git add commit.md
- 57. Внесение изменений Working directory Commit index Последний коммит git commit
- 58. Working directory changes Commit index changes Commit message
- 59. Внесение изменений Последний коммит Commit index Working directory Редактирование git add . git commit
- 60. Отмена изменений Working directory Commit index Последний коммит git add commit.md
- 61. Отмена изменений Working directory Commit index Последний коммит git add commit.md git restore --staged commit.md
- 62. Отмена изменений Working directory Commit index Последний коммит git restore --staged commit.md git add commit.md
- 63. Отмена изменений Working directory Commit index Последний коммит Редактирование
- 64. Отмена изменений Working directory Commit index Последний коммит Редактирование git restore --worktree commit.md
- 65. Отмена изменений Working directory Commit index Последний коммит Редактирование git restore --worktree commit.md restore не может
- 66. Отмена изменений Working directory Commit index Последний коммит Редактирование v2 v1
- 67. Отмена изменений Working directory Commit index Последний коммит Редактирование v2 v1 git restore --worktree commit.md
- 68. Отмена изменений Working directory Commit index Последний коммит Редактирование v1 v1 git restore --worktree commit.md restore
- 69. Отмена изменений Последний коммит Commit index Working directory Редактирование git add . git commit git restore
- 70. Отмена изменений по-старому Последний коммит Commit index Working directory Редактирование git add . git commit git
- 71. Отмена изменений Последний коммит Commit index Working directory Редактирование git add . git commit git restore
- 72. Один файл с разными версиями
- 73. Working directory changes Commit index changes Commit message
- 74. Удобный алиас git config --global alias.st "status -sb"
- 75. Задание 3. Commits
- 76. S1. Все локально S2. Хранятся состояния директории, постепенная сборка коммита H1. Гибкое конфигурирование и качественная документация
- 77. S3. Манипуляции через ссылки, нет ссылки — в мусор HEAD — текущая ссылка, tag — фиксированная
- 78. Указывает на коммит, относительно которого выполняются операции с ним связан Commit index и Working directory в
- 79. Именованная ссылка, привязанная к конкретному коммиту Псевдоним коммита Применяется для обозначения версий Полезен при манипуляциях над
- 80. Движущаяся ссылка, которая сдвигается вместе с HEAD, если тот на нее указывает Branch f1 HEAD master
- 81. Движущаяся ссылка, которая сдвигается вместе с HEAD, если тот на нее указывает Branch f1 HEAD master
- 82. Движущаяся ссылка, которая сдвигается вместе с HEAD, если тот на нее указывает Получающаяся за этой ссылкой
- 83. Каждой фиче – отдельная ветка
- 84. Detached HEAD f1 HEAD master f2 HEAD может указывать не только на ветку, но и непосредственно
- 85. Что произойдет после коммита? f1 HEAD master f2
- 86. Коммит без движения ветки f1 master f2 Коммит всегда происходит в HEAD, но если HEAD не
- 87. Ветки и теги в Git Extensions
- 88. Ветки и теги в Git Graph
- 89. Ветки и теги в Git Bash
- 90. Удобный алиас git config --global alias.graph "log --oneline --decorate --graph --all"
- 91. Команда checkout может перенести HEAD на какую-нибудь ветку Checkout на ветку f1 master HEAD f2
- 92. Команда checkout может перенести HEAD на какую-нибудь ветку Checkout на ветку f1 master HEAD f2
- 93. Команда checkout может перенести HEAD на любой коммит, причем получится detached HEAD Checkout на коммит f1
- 94. Команда checkout может перенести HEAD на любой коммит, причем получится detached HEAD Checkout на коммит f1
- 95. Checkout старается перенести локальные изменения, либо не выполняется
- 96. Switch — новая команда, задуманная как замена для checkout
- 97. Команда reset может перенести HEAD на любой коммит, причем захватывает с собой ветку, на которую указывает
- 98. Команда reset может перенести HEAD на любой коммит, причем захватывает с собой ветку, на которую указывает
- 99. Reset в режиме hard затирает локальные изменения Пока этого достаточно!
- 100. Если на коммит есть ссылка: HEAD, tag, branch – то он показывается, а иначе скрывается Если
- 101. Помните выполнение reset --hard? f1 master HEAD f2
- 102. Вот это уже мусор f1 master HEAD f2
- 103. Выглядеть будет так f1 master HEAD f2
- 104. Если потерялся коммит в ходе манипуляций, то он не удален и его можно найти Если закоммичено
- 105. Все перемещения ссылок логируются и хэши всех видимых когда-либо ревизий оседают в этих логах
- 106. Reflog в Git Extensions
- 107. Reflog в консоли
- 108. Отмечать дорогие сердцу коммиты тегами перед сложными манипуляциями Помнить про особенность git log. По умолчанию показывает
- 109. A / \ / \ B C /| / | D E Относительная адресация коммитов A
- 110. А это точно надо запомнить?
- 111. А это точно надо запомнить? Нет!
- 112. Удобный алиас git config --global alias.undo "reset --soft HEAD^" Эта команда отменяет commit, но про режим
- 113. Задание 4. Tag Задание 5. Feature Branches
- 114. S1. Все локально S2. Хранятся состояния директории, постепенная сборка коммита S3. Манипуляции через ссылки, нет ссылки
- 115. A1. Трехсторонний merge в три шага Два состояния можно объединить через merge, mergetool и commit Участвуют
- 116. Разрабатывать в отдельных ветках правильно, но в конце концов надо объединить функционал в одной версии Слияние
- 117. Разрабатывать в отдельных ветках правильно, но в конце концов надо объединить функционал в одной версии Значит
- 118. Как объединить изменения? A.txt D.txt A.txt B.txt D.txt A.txt C.txt master f2 ?
- 119. Как объединить изменения? A.txt D.txt A.txt B.txt D.txt A.txt C.txt D.txt master f2 A.txt B.txt C.txt
- 120. Общий родитель 1 4 2 3 master f2 Общий родитель для master и f2
- 121. А если был изменен один и тот же файл?
- 122. Как объединить изменения? master f2 ?
- 123. Как объединить изменения? master f2
- 124. А если одна и та же строчка?
- 125. contact : [email protected] ======= please contact us at [email protected] >>>>>>> iss53:index.html Конфликт
- 126. contact : [email protected] ======= please contact us at [email protected] >>>>>>> f2:index.html Конфликт Создается текстовый блок, содержащий
- 127. Необходимо заменить все «объединенные» текстовые блоки на правильное содержимое Стратегии Взять один вариант Взять второй вариант
- 128. Разрешение конфликта в VS Code
- 129. В конфликтах HEAD указывает на current Другая ветка — это incoming При merge HEAD указывает на
- 130. Current и Incoming
- 131. Надо объединять на уровне списка файлов и на уровне содержимого файлов Нужно знать две объединяемые версии,
- 132. Алгоритм слияния
- 133. Алгоритм слияния
- 134. Алгоритм слияния Можно остановиться, а затем продолжить Git Extensions автоматически переходит к следующему шагу
- 135. Как поведут себя ветки? 1 4 2 3 master f2 5
- 136. Как поведут себя ветки? 1 4 2 3 master f2 5 HEAD
- 137. Как поведут себя ветки? 1 4 2 3 master f2 5 HEAD Сдвинется ветка, на которой
- 138. Слияние в Git Extensions
- 139. Слияние в Git Graph
- 140. А что если обратно влить? 1 4 2 3 master f2 5 HEAD
- 141. Fast-Forward Merge 1 3 2 4 master f2 5 HEAD Нет смысла создавать коммит – просто
- 142. merge --no-ff 1 3 2 4 master f2 5 HEAD Можно заставить Git создать новый коммит
- 143. Иногда вследствие неведомых действий состояние директории полно конфликтов, merge не завершен и его хочется отменить А
- 144. Иногда вследствие неведомых действий состояние директории полно конфликтов, merge не завершен и его хочется отменить Переходим
- 145. Иногда вследствие неведомых действий состояние директории полно конфликтов, merge не завершен и его хочется отменить Переходим
- 146. Иногда вследствие неведомых действий состояние директории полно конфликтов, merge не завершен и его хочется отменить git
- 147. Лишние файлы после merge? При создании конфликта Git генерирует .orig-файлы с версиями до слияния Они исчезнут
- 148. Задание 6. Merge Conflict Задание 7. Hidden Conflict Задание 8. Fast-Forward Merge
- 149. S1. Все локально A1. Трехсторонний merge в три шага S2. Хранятся состояния директории, постепенная сборка коммита
- 150. A2. rebase, cherry-pick и amend, чтобы пересоздать историю Нельзя переписать историю — можно создать новую
- 151. Даже если кажется, что Git редактирует коммиты, на самом деле он создает новые
- 152. Amend — англ. Вносить правки Amend Commit Последний коммит Commit index Working directory Хочется дополнить последний
- 153. Amend Commit Изменения из Commit index и старого коммита теперь в новом коммите Старый коммит остался,
- 154. Слияния порождает лишние коммиты, а история становится нелинейной Rebase master HEAD f2
- 155. Слияния порождает лишние коммиты, а история становится нелинейной Хочется получать линейную историю! Менять коммиты нельзя –
- 156. Rebase создает новые коммиты 1 4 2 3 master HEAD f2 1 4 2’ 3’ master
- 157. Те же изменения на новой «базе» 1 4 2’ 3’ 2 3 1.txt 2.txt 3.txt 4.txt
- 158. Rebase по шагам 1 4 master HEAD f2 2 3
- 159. Rebase по шагам 1 4 master HEAD f2 2 3
- 160. Rebase по шагам 1 4 2’ master HEAD f2 2 3
- 161. Rebase по шагам 1 4 2’ 3’ master HEAD f2 2 3
- 162. Изменения в коммите 4, новой базе, могут конфликтовать с изменениями в 2 и в 3 Следовательно,
- 163. В конфликтах HEAD указывает на current Другая ветка — это incoming После начала rebase HEAD перемещается
- 164. После решения конфликтов — продолжение git rebase --continue
- 165. Иногда приходит понимание, что не надо было ввязываться в этот rebase с кучей конфликтов при переносе
- 166. Позволяет указать, как применять каждый коммит Например, можно делать squash всех переносимых коммитов в один Интерактивный
- 167. Сценарий интерактивного rebase Обычный вариант С объединением коммитов
- 168. Rebase в Git Extensions
- 169. Rebase в Git Graph
- 170. Позволяет создать копию изменений произвольного коммита в новом месте cherry picking — идиома, означающая взять лучшее
- 171. Позволяет создать копию изменений произвольного коммита в новом месте cherry picking — идиома, означающая взять лучшее
- 172. Задание 9. Hot Rebase Задание 10. Reflog
- 173. S1. Все локально A1. Трехсторонний merge в три шага A2. rebase, cherry-pick и amend, чтобы пересоздать
- 174. R1. Доступен fetch коммитов любого репозитория в любой момент
- 175. Клонирование https://repos/repo git clone https://repos/repo
- 176. origin https://repos/repo origin = https://repos/repo git clone https://repos/repo
- 177. remote https://repos/repo origin = https://repos/repo
- 178. Таблица remote https://repos/repo origin = https://repos/repo arnold = https://arnold/repo https://arnold/repo Список «кликух» для дружественных репозиториев
- 179. Remote в Git Extensions
- 180. Remote в Git Extensions
- 181. Remote в консоли
- 182. Обмен изменениями 1 master
- 183. Появился клон 1 master 1 master origin/master
- 184. Прошло время 1 f1 2 3 master 4 5 1 f2 6 master 7 8 origin/master
- 185. А что если в правый добавить из левого? 1 f1 2 3 master 4 5 1
- 186. А что если в правый добавить из левого? origin/f1 2 3 origin/master 4 5 1 f2
- 187. fetch – операция получения изменений из другого репозитория Это безопасная операция за счет неизменности истории В
- 188. Все же, что здесь делать? origin/f1 2 3 origin/master 4 5 1 f2 6 master 7
- 189. Rebase локальной ветки origin/f1 2 3 origin/master 4 5 1 f2 7 8 6’ master
- 190. Теперь все хорошо origin/f1 2 3 origin/master 4 5 1 f2 7 8 6’ master
- 191. Задание 11. Fetch From Remote Задание 12. Interactive Rebase Задание 13. Cherry Pick
- 192. S1. Все локально A1. Трехсторонний merge в три шага A2. rebase, cherry-pick и amend, чтобы пересоздать
- 193. R2. Удаленное изменение — это push
- 194. Надо отправить изменения origin/f1 2 3 origin/master 4 5 1 f2 7 8 6’ master
- 195. Применим push origin/f1 2 3 origin/master 4 5 1 f2 7 8 6’ master
- 196. Применим push 2 3 origin/master 1 6’ master Раз master можно влить в origin/master через fast-forward
- 197. Отправляет коммиты в удаленный репозиторий Сдвигает ветки в удаленном репозитории Требует права на запись в удаленный
- 198. Удаление ветки – это тоже push, только другой git push -d В Git Extensions разница между
- 199. Добавление или удаление тегов в удаленном репозитории — это тоже push git push tag git push
- 200. Ситуация без rebase origin/f1 2 3 origin/master 4 5 1 f2 6 master 7 8
- 201. Fast-Forward Merge невозможен 2 3 origin/master 1 6 master
- 202. Force Push может помочь… 2 3 origin/master 1 6 master
- 203. Force Push заставит ветку сдвинуться 2 3 origin/master 1 6 master
- 204. Force Push заставит ветку сдвинуться 2 3 origin/master 1 6 master Коммиты будут потеряны Если их
- 205. Никогда не делай Force Push в master Со своими ветками делай что хочешь
- 206. Реалистичный пример
- 207. Картина мира первого разработчика 2 3 origin/master 1 2’, 3’ master
- 208. Картина мира второго разработчика f3 2 3 master 9 1 origin/master
- 209. Худшие ожидания второго f3 2 3 master 9 1 10 origin/master Легко решается: FF merge для
- 210. Но первый делает подлянку 2 3 origin/master 1 2’, 3’ master
- 211. Что видит второй после fetch f3 2 3 master 9 1 origin/master 2’, 3’ Неожиданный подарок:
- 212. А что если второй будет быстрее? f3 2 3 master 9 1 origin/master
- 213. Вольет свою ветку в master и запушит? f3 2 3 master 9 1 origin/master Работа сделана!
- 214. Затем первый в неведении делает подлянку 2 3 origin/master 1 2’, 3’ master
- 215. Итоговая картина origin/f3 2 3 9 1 origin/master 2’, 3’ master
- 216. Итоговая картина origin/f3 2 3 9 1 origin/master 2’, 3’ master Изменения второго разработчика не влиты
- 217. Итоговая картина origin/f3 2 3 9 1 origin/master 2’, 3’ master Изменения второго разработчика не влиты
- 218. Пристальный взгляд на проблему 2 3 9 1 origin/master 2’, 3’ master origin/master
- 219. Пристальный взгляд на проблему 2 3 9 1 origin/master 2’, 3’ master origin/master Надо запрещать Force
- 220. Никогда не делай Force Push Не делай Force Push With Lease в master Со своими ветками
- 221. Удобный алиас git config --global alias.please "push --force-with-lease"
- 222. Задание 14. Push
- 223. S1. Все локально A1. Трехсторонний merge в три шага R2. Удаленное изменение — это push A2.
- 224. R3. Явное сопоставление локальных веток с upstream
- 225. Upstream repository GitHub
- 226. Upstream repository GitHub
- 227. Никак – надо всегда прописывать обе ветки явно Должно совпадать имя Есть внутренняя таблица сопоставления Git
- 228. Для основного репозитория Используется сопоставление из таблицы При push новой ветки достаточно указать намерение git push
- 229. Как создать привязку для f1? origin/f1 2 3 origin/master 4 5 1 f2 7 8 6’
- 230. Как создать привязку для f2? origin/f1 2 3 origin/master 4 5 1 f2 7 8 6’
- 231. Удобный алиас git config --global alias.pushup "push -u origin HEAD"
- 232. Upstream mapping в Git Extensions
- 233. Upstream mapping в консоли Local branch Upstream branch Remote name
- 234. git pull origin = git fetch + git merge origin/ git pull --rebase origin = git
- 235. Либо fast-forward merge, либо без merge С помощью опций: pull --ff-only Установить для pull по умолчанию:
- 236. Удобный алиас git config --global alias.pure "pull --rebase --autostash"
- 237. Задание 15. Upstream
- 238. S1. Все локально A1. Трехсторонний merge в три шага R2. Удаленное изменение — это push A2.
- 239. A3. stash, reset, revert для управления изменениями Изменения можно временно припрятать Можно получить разницу между любыми
- 240. Что произойдет при влитии f1 в f2?
- 241. Произойдет конфликт
- 242. Что произойдет при влитии f1 в f2?
- 243. Бесконфликтное слияние
- 244. Почему?
- 245. Состояния слева и справа совпадают ABC ABC ABC f1 f2 А история не имеет значения
- 246. Каждый коммит хранит структуру каталога и все файлы состояния директории Хранение файлов оптимизировано: файлы не хранятся
- 247. Diff можно получить между любыми коммитами 2 3 1 5 6 4
- 248. Diff можно получить между любыми коммитами 2 3 1 5 6 4 A.txt B.txt D.txt A.txt
- 249. Что изменится при переходе от 4 к 6? 2 3 1 5 6 4 A.txt B.txt
- 250. Что изменится при переходе от 6 к 4? 2 3 1 5 6 4 A.txt B.txt
- 251. reset --hard HEAD f1 HEAD f1
- 252. Переносит ветку вслед за HEAD Выставляет индекс и директорию согласно коммиту, устраняет разницу reset --hard
- 253. reset --hard A.txt B.txt A.txt A.txt A.txt B.txt B.txt B.txt
- 255. reset --mixed HEAD f1 HEAD f1
- 256. Переносит ветку вслед за HEAD Задает индекс согласно коммиту Оставляет разницу между исходным и новым состоянием
- 257. reset --mixed A.txt B.txt A.txt A.txt A.txt B.txt B.txt A.txt Δ WD: +A, -B Δ CI:
- 258. Working directory changes Commit index changes
- 259. reset --soft HEAD f1 HEAD f1
- 260. Переносит ветку вслед за HEAD Не задает ни индекс, ни директорию согласно коммиту Оставляет разницу между
- 261. reset --soft A.txt B.txt A.txt A.txt A.txt B.txt A.txt A.txt Δ WD: +- Δ CI: +A,
- 262. Working directory changes Commit index changes
- 263. Удобный алиас git config --global alias.undo "reset --soft HEAD^"
- 264. Тайник для временного сохранения изменений После сохраненные изменения можно восстановить в том же или в другом
- 265. Неудачные изменения одного коммита можно отменить противоположными изменениями в следующем коммите Revert + master HEAD
- 266. Неудачные изменения одного коммита можно отменить противоположными изменениями в следующем коммите Revert + - master HEAD
- 267. Неудачные изменения одного коммита можно отменить противоположными изменениями в следующем коммите Revert + - master HEAD
- 268. Revert полезен, когда надо отменить изменение, а перестраивать историю нельзя
- 269. Задание 16. Stash Задание 17. Hard Reset Задание 18. Soft Reset
- 270. S1. Все локально A1. Трехсторонний merge в три шага R2. Удаленное изменение — это push A2.
- 271. Разное
- 272. Что такое Pull Request GitHub
- 273. Изменения в локальном репозитории GitHub f1
- 274. Отправка изменений в свой удаленный GitHub f1 f1
- 275. PR – запрос на fetch + merge GitHub f1 f1
- 276. Если PR принят, то fetch GitHub f1 f1 f1
- 277. Если PR принят, то merge GitHub f1 f1 master
- 278. Что такое Merge Request GitLab
- 279. Изменения в локальном репозитории GitLab f1
- 280. Отправка изменений в удаленный GitLab f1 f1
- 281. MR – запрос на merge GitLab f1 f1
- 282. Если MR принят, то merge GitLab f1 master
- 283. Картина для централизованного репозитория https://repos/repo https://arnold/repo https://brayan/repo Здесь создаются коммиты Этот репозиторий обрабатывает пуши и отдает
- 284. Получить последние изменения Создать локальную ветку Разработать в ней фичу Получить последние изменения Влить мастер в
- 285. Блиц
- 286. Надо подключить Git к папке, в который ты делаешь тестовое задание
- 287. Надо загрузить локальный репозиторий с тестовым заданием на GitHub для проверки
- 288. Надо подключиться к разработке сервиса в отдельном репозитории
- 289. Надо начать разработку новой фичи
- 290. Сделаны некоторые изменения, надо их сохранить в репозитории
- 291. Ты забыл добавить кое-что в последний коммит, а надо
- 292. Надо сделать так, чтобы новая фича была доступна для тестирования
- 293. Тестировщик попросил, чтобы последние исправления из master тоже были в ветке с фичей
- 294. При влитии исправлений из master возникли конфликты
- 295. Пора сделать релиз фичи, у вас фичи релизятся из master
- 296. Надо помочь другому разработчику сделать фичу
- 297. За день ты сделал некоторые изменения и решил ими поделиться
- 298. Оказалось, что твой напарник тоже сделал изменения Надо их получить, а затем опубликовать свои изменения
- 299. На следующий день ты продолжил работать над фичей, но тебя срочно попросили починить опечатку прямо в
- 300. Ты поправил опечатку, закоммитил в master и получил изменения в origin/master Ты решил переключиться на origin/master,
- 301. Ты вернулся к фиче, которую делал с другим разработчиком
- 302. У твоего напарника сегодня выходной Ты доделал изменения, о которых вы договаривались Их надо сохранить перед
- 303. Ты начал делать новую задачу и сделал первый коммит Но понял, что забыл завести ветку, а
- 304. Разработка не клеилась… Ты сделал десяток коммитов, перед тем как понял, как решать задачу Чтобы избежать
- 305. Чтобы список веток был коротким, ты решил удалить влитые локальные ветки
- 306. Бурная неделя закончилась Пора отдыхать!
- 308. Скачать презентацию