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 .git
Git 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