Git
Git — Система контроля версий с распределенной архитектурой.
Подходы
- Feature Branch Workflow — простой и самый популярный вариант. В нём для каждого нового изменения создаётся новая ветка, которая позже вливается в
mainс помощьюgit merge. - Git Flow — более сложный вариант. Подход похож на Feature Branch Workflow, но в нём создаётся больше веток, а изменения (коммиты) делят на разные типы: исправление, новая функциональность и так далее. Разные типы коммитов попадают в разные ветки.
- Trunk-based — популярный подход в крупных командах, который обещает большую скорость работы.
Привязать удалённый репозиторий к локальному
- Инициализируем новый репозиторий
sh
git init- Добавляем удаленный репозиторий
sh
git remote add origin git@github.com:<UserName>/<ProjectName>.git- Загружаем ветоки
sh
git fetch- Проверить, что репозитории связаны:
sh
git remote -v- Если нужно «разгитить» папку:
sh
rm -rf .gitGit Add
git add— добавить файлgit add --all— добаввить все файлыgit add .— добавить текущую папку со всеми файлами
Git Branch
git branch— просмотреть ветки проектаgit branch -D <название_ветки>— удалить ветку
Git Checkout
git checkout <название_ветки>— переключиться на другую веткуgit checkout -b <название_ветки>— создать ветку и сразу переключиться на неё
Git Commit
git commit -m '<Message>'— выполнить коммит с сообщениемgit commit --amend --no-edit— дополнить последний коммит новыми файлами без изменения сообщенияgit commit --amend -m '<New_message>'— изменить сообщение последнего коммита
Git Diff
git diff <название_ветки1> <название_ветки2>— сравнить ветки
Git Fetch
git fetch— загрузка содержимого из удаленного репозиторияgit fetch <remote>— извлечение всех веток из репозиторияgit fetch <remote> <название_ветки>— извлечение только для указанной веткиgit fetch --all— извлечь все зарегистрированные удаленные репозитории и их веткиgit fetch --dry-run— выводит на экран действия, которые были бы выполнены при извлечении, не выполняя их на самом деле
Git Log
git log— просмотреть историю коммитовgit log --oneline— сокращённый лог
Git Merge
git merge <название_ветки>— выполнить слияниеgit merge --no-ff <название_ветки>— отключить слияние веток
Git Pull
git pull— забрать изменения из удалённого репозитория
Git Push
git push— отправить изменения на удалённый репозиторийgit push -u origin main— для первой связки локальной и удалённой ветки
Git Reset
git reset --hard <commit hash>— откатить коммит
Git Restore
git restore --staged <file>— убрать файл из staginggit restore --staged .— сбросить все файлы из staged в untracked/modifiedgit restore <file>— откатить изменения, которые не попали ни в staging, ни в коммит
Git Stash
git stash save 'Bug Fix: Main page'— спрятать изменения с комментариемgit stash save -u 'Bug Fix: Main page— спрятать изменения с добавлением новых файлов (--include-untracked)git stash save -a 'Bug Fix: Main page'— спрятать изменения с добавлением всех игнорируемых файловgit stash list— вывести список всех спрятанных измененийgit stash apply stash@{0}— применить спрятанные измененияgit stash show stash@{1}— показать какие изменения в спрятанных файлахgit stash pop— удалить спрятанные измененияgit stash pop stash@{0}— удалить конкретное изменениеgit stash branch <название_ветки>— создать новую ветку со всеми изменениями из локального хранилищаgit stash drop— удалить старые сохранения из локального хранилищаgit stash clean— полностью очистить локальное хранище
Git Status
git status— проверить состояние репозитория
Порядок действий
sh
# переходим в main
git checkout main
# подтягиваем новые изменения в main
git pull
# возвращаемся в рабочую ветку <branch>
git checkout <branch>
# вливаем main в новую ветку <branch>
git merge main
# отправляем ветку <branch> в удалённый репозиторий
git push -u origin <branch>Настройка .gitconfig
Задаем имя или никнейм:
sh
git config --global user.name "UserName"Задаем электронную почту:
sh
git config --global user.email username@example.comПосмотреть настройки:
sh
git config --listОтключить Fast-forward «навсегда» (вернуть настройку по умолчанию true)
sh
git config [--global] merge.ff falseОбновить URL-адрес репозитория
Частой ошибкой является клонирование репозитория с использованием HTTPS вместо SSH
sh
git remote set-url origin git@github.com:username/repo.gitВыбрать дефолтную ветку
main — название ветки
sh
git config --global init.defaultBranch main