Введение в Git
Системы контроля версий представляют собой программные средства, которые регистрируют все изменения в исходном коде и позволяют легко восстановить старые версии.
Например, если вы заменяете функцию, а потом решаете, что старая версия нравится вам больше, вы можете восстановить исходный фрагмент кода.
Или при обнаружении новой ошибки вы можете вернуться к более ранним версиям, чтобы определить, когда она впервые появилась и какие изменения её вызвали.
Вы можете сравнивать, анализировать, редактировать, сливать изменения и возвращаться назад к последнему сохранению. Этот процесс называется контролем версий.
Git — самое популярное приложение контроля версий.
Как устроен Git
- Вы работаете над проектом. В любой момент вы можете сохранить "снимок" (snapshot) вашего проекта. И работать дальше 
- В любой момент вы можете "откатиться" назад — вернуться к любому из "снимков" 

- Если вы работаете над проектом не один — ваши коллеги также могут работать над проектом, реализуя другие фичи. И никто не будет мешать друг другу. Это возможно благодаря концепции "веток" (бранчей) — каждый может работать в своей ветке, а потом слить всё в одну. 
Установка
Скачайте GIT по ссылке: https://git-scm.com/downloads
Использование
Если вы работаете на Windows, то после установки увидите программы:
- GIT GUI — приложение с графическим интерфейсом 
- GIT Bash — командная оболочка для управления Git. Даже если вы планируете всегда работать из GUI, знать основные команды необходимо. - В будущем возможно вы будете работать под Linux, для которого нет графического приложения. 
- Работа с командной строкой для любого разработчика — это полезный навык. 
- Даже с GUI часть команд нужно вводить через консоль 
 
- Создайте каталог для вашего проекта. 
- Запустите программу GIT Bash. Перейдите в папку с проектом. 
- Настройте git, введя в консоль следующие команды (исправьте на своё имя и почту): 
git config --global user.name "My Name"
git config --global user.email myEmail@example.com- Введите команду - git initдля создания нового репозитория
- Репозиторий создан. Теперь состояние вашего проекта отслеживается и доступна история изменений. Убедиться в этом можно при помощи команды - git status
Практика:
- Установите GIT на компьютер, создайте репозиторий. 
- Создайте файл "hello.txt" в своём репозитории, добавьте любой текст 
Основные команды
git add <filename> — добавить файл в "отслеживаемые", то есть подготовить к коммиту
git add . — подготовить к коммиту сразу все файлы репозитория (точка важна!)
git reset <имя_файла> — убрать файл из "отслеживаемых"
git commit -m <сообщение коммита> — сделать коммит
git status — посмотреть статус файлов
git log — посмотреть коммиты
git show <hash_commit> — посмотреть информацию о коммите, здесь хэш коммита - его идентификационный номер
git commit --amend -m 'Новый комментарий' — перезаписать сообщение последнего коммита
git revert <hash_commit> — вернуться на состояние до указанного коммита
Удаленный репозиторий
- Чтобы поделиться кодом, он должен где-то храниться 
- Для этого существуют удаленные репозитории и сервисы для их хранения 
- Один из примеров таких сервисов это GitHub 
Практика:
- Зарегистрируйтесь на GitHub 
Теперь вы можете склонировать себе любой репозиторий, который там есть. Для этого введите команду:
git clone <ссылка_на_проект> Обратите внимание, каталог с репозиторием будет создан в рабочей директории.
Для подключения своего, локального репозитория к удаленному, введите команду:
git remote add origin <ссылка на удаленный репозиторий>
Для этого удаленный репозиторий должен быть создан. То есть перед этим создайте репозиторий на GitHub.
Ещё пару команд:
git push origin master — запушить изменения в ветку "master" в удаленный репозиторий "origin". Часто главная ветка называется "main".
git pull origin master — стянуть себе изменения из удаленного репозитория
Работа с ветками
Ветка — независимая последовательности коммитов в хронологическом порядке
Основной идеей ветвления является отклонение от основного кода и продолжение работы независимо от него. Также это удобно в тестировании отдельного функционала, потому что позволяет работать над новой частью кода, не беспокоясь о поломке чего-то в рабочей версии.
# создание ветки
$ git branch <name of new branch>
# переключение на ветку
$ git checkout <name of branch>
# создаем ветку и сразу в нее переключаемся:
$ git checkout branch <name of new branch> 
# посмотреть, какие ветки есть
$ git branch
# переименовать ветку
$ git branch -m <new name of branch>
# удалить ветку
$ git branch -d <name of branch>
# удалить ветку даже с несохраненными изменениями
$ git branch -D <name of branch>Слияние
$ git merge <name of merged branch>Операция может привести к появлению конфликтов при попытке слить ветки. Это вызвано тем, что изменения удаляют или переписывают информацию в существующих файлах. При попытке некорректного слияния Git останавливает выполнение команды, чтобы вы могли разрешить конфликт.
Также стоит упомянуть о существовании ключей, предназначенных специально для работы с конфликтами:
- —abort — прерывает слияние и возвращает все к началу 
- —continue — продолжает слияние после разрешения конфликта 
Решить конфликт можно двумя способами:
- Вручную разрешить файловый конфликт. Для этого нужно самим изменить файлы, с которыми возникли проблемы. Мы получим файлы такими, какими и представляли их при попытке слияния. 
- Выбрать более подходящий файл, а от второго отказаться. 
Git Flow
- Git Flow — стандарт работы с Git, который устанавливается в крупных компаниях и для совместной работы над крупным проектом 

Материалы для изучения:
- Книга ProGit на русском: https://git-scm.com/book/ru/v2 
Last updated
