В этом мини-курсе мы разберем на практике работу в Git, в связке git + github, gitlab, bitbucket, посоздаем и помержим ветки, поразруливаем самые разные конфликты, посоздаем пулреквесты. Для новичков я всячески рекомендую повторять за мной, чтобы максимально эффективно научиться работе с git.
Буду также рад подписке на мой уютный telegram бложик: https://t.me/OlegMalyshevBlog
В уроке рассмотрены темы
- О системе контроля версий и GIT
 - Какие системы контроля версий бывают
 - Установка
 - Про git config
 - Архитектура git
 - Создаем первый репозиторий, клонируем по https.
 - Про git status
 - Про Github
 - Работа в Git со стороны разработчика
 - SSH в Git
 - ssh-keygen
 - Про пары ключей
 - Создаем репозиторий через git init
 - Решаем проблему remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
 - Ветки в GIT
 - Про git branch
 - Про upstream branch
 - git merge (Слияние веток)
 - Решаем разные конфликты при мердже веток
 - Ревью автотестов в gitlab
 - Разруливаем конфликты на реальном проекте с автотестами git + idea + java + bitbucket.
 - Создаем, апрувим и мерджим pull request
 
Полезные ссылки
- https://git-scm.com/downloads — установка GIT
 - https://git-scm.com/book/ru/v2 — книга про гит
 - Генерация ssh ключа через ssh-keygen
 
Шпаргалка по командам git
git init
- Описание: Инициализирует новый Git репозиторий.
 - Пример: git init
 
git clone <url>
- Описание: Клонирует репозиторий из удаленного источника.
 - Пример: git clone https://github.com/user/repo.git
 
git add <file>
- Описание: Добавляет файл в индекс для последующего коммита.
 - Пример: git add example.txt
 
git commit -m "message"
- Описание: Коммитит изменения с сообщением.
 - Пример: git commit -m «Initial commit»
 
git status
- Описание: Показывает статус изменений.
 - Пример: git status
 
git push <remote> <branch>
- Описание: Отправляет изменения в удаленный репозиторий.
 - Пример: git push origin master
 
git pull <remote>
- Описание: Забирает изменения из удаленного репозитория.
 - Пример: git pull origin
 
git branch <branch-name>
- Описание: Создает новую ветку.
 - Пример: git branch new-feature
 
git checkout <branch-name>
- Описание: Переключается на указанную ветку.
 - Пример: git checkout new-feature
 
git merge <branch-name>
- Описание: Объединяет указанную ветку с текущей.
 - Пример: git merge new-feature
 
git diff
- Описание: Показывает разницу между коммитами, ветками и т.д.
 - Пример: git diff
 
git log
- Описание: Показывает историю коммитов.
 - Пример: git log
 
git reset
- Описание: Отменяет изменения (может использоваться с разными опциями).
 - Пример: git reset —hard HEAD^ 
--hard: Этот флаг указывает Git полностью отменить все изменения в рабочем каталоге и индексе, возвращая их к состоянию последнего коммита. Это может привести к потере всех незакоммиченных изменений, поэтому его использование требует осторожности.HEAD^илиHEAD~1: Это означает «один коммит назад от текущего HEAD».HEAD— это указатель на текущий коммит (то есть последний коммит текущей ветки), а^(или~1) указывает на коммит, который был сделан перед HEAD. Когда вы выполняетеgit reset --hard HEAD^, Git отменит все изменения, сделанные в последнем коммите, и вернет состояние репозитория к тому, как оно было до этого коммита. Все изменения, внесенные в последнем коммите, будут утеряны. Эта операция необратима, так что ее следует использовать с осторожностью. 
git stash
- Описание: Временно сохраняет изменения, которые еще не готовы к коммиту.
 - Пример: git stash
 
git fetch <remote>
- Описание: Получает изменения из удаленного репозитория, не объединяя их с текущей веткой.
 - Пример: git fetch origin
 
git push -u <remote> <branch>
- Описание: Отправляет изменения в указанную ветку удаленного репозитория и устанавливает связь для последующих команд 
pushиpull. - Пример: git push -u origin master
 
git remote add <remote-name> <url>
- Описание: Добавляет новый удаленный репозиторий под указанным именем.
 - Пример: git remote add origin https://github.com/user/repo.git
 
git remote -v
- Описание: Отображает список удаленных репозиториев.
 - Пример: git remote -v
 
git checkout -b <new-branch>
- Описание: Создает новую ветку и сразу переключается на нее.
 - Пример: git checkout -b new-feature
 
git rm <file>
- Описание: Удаляет файл из рабочего каталога и индекса.
 - Пример: git rm example.txt
 
git mv <old-file> <new-file>
- Описание: Переименовывает или перемещает файл.
 - Пример: git mv old-name.txt new-name.txt
 
git stash apply
- Описание: Применяет изменения из последнего сохраненного состояния, не удаляя его из стека stash.
 - Пример: git stash apply
 
git stash pop
- Описание: Применяет изменения из последнего сохраненного состояния и удаляет их из стека stash.
 - Пример: git stash pop
 
git stash list
- Описание: Показывает список всех сохраненных состояний.
 - Пример: git stash list
 
git revert <commit>
- Описание: Создает новый коммит, который отменяет изменения указанного коммита.
 - Пример: git revert a1b2c3d
 
git rebase <branch>
- Описание: Перемещает или «перебазирует» текущую ветку на указанную.
 - Пример: git rebase master
 
Git rebase — это команда в Git, используемая для изменения базы (начальной точки) вашей ветки. Другими словами, она позволяет «перенести» серию коммитов на новую базу. Вот как это работает, объяснено простыми словами:
- Выбор новой базы: Предположим, у вас есть две ветки: 
masterиfeature.Featureветка отделилась отmasterнекоторое время назад, и с тех пор вmasterбыли сделаны новые коммиты. Если вы хотите, чтобы вашаfeatureветка включала эти новые изменения изmaster, вы можете использоватьrebase. - Перенос коммитов: Когда вы выполняете 
rebase, Git берет все коммиты из вашейfeatureветки, которые были сделаны после того, как она отделилась отmaster, и временно «сохраняет» их. Затем он обновляетfeatureветку до последнего коммитаmaster. - Применение изменений: После обновления 
featureветки до текущего состоянияmaster, Git начинает заново применять каждый из сохраненных коммитовfeatureветки. Это как будто вы только что создали эти коммиты на основе текущегоmaster. - Разрешение конфликтов: Если в процессе 
rebaseвозникают конфликты (например, если вmasterиfeatureветках были изменены одни и те же части кода), Git остановит процесс и попросит вас их разрешить. - Результат: В итоге ваша 
featureветка будет выглядеть так, как будто вы начали ее работы прямо с последнего коммитаmaster. Это делает историю коммитов более чистой и понятной. 
git tag <tag-name>
- Описание: Создает новый тег, указывающий на текущий коммит.
 - Пример: git tag v1.0.0
 
git fetch --all
- Описание: Загружает все изменения из всех удаленных репозиториев.
 - Пример: git fetch —all
 
git reset <file>
- Описание: Отменяет индексацию указанного файла, сохраняя его содержимое.
 - Пример: git reset example.txt
 
git config --global user.name "Your Name"
- Описание: Устанавливает имя пользователя для всех репозиториев на текущем компьютере.
 - Пример: git config —global user.name «Your Name»
 
Малышев вещает | Обучение | YouTube | QA чат | Поддержать на Boosty