В этом мини-курсе мы разберем на практике работу в 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»