Команды, которые покрывают 95% ежедневной работы. Сделай закладку. Подробные разборы - в статьях про Git flow, rebase vs merge и .gitignore.

Настройка (один раз)

git config --global user.name "Имя Фамилия"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global pull.rebase true          # pull через rebase, без мусорных merge-коммитов
git config --global core.excludesfile ~/.gitignore_global

Ежедневное

Команда Что делает
git status -sb Короткий статус + ветка
git add -p Добавить изменения по кускам (выборочно)
git commit -m "msg" Коммит
git commit --amend --no-edit Дописать в последний коммит
git pull origin main Подтянуть изменения
git push -u origin <ветка> Запушить и связать ветку
git fetch --all --prune Обновить ссылки, удалить мёртвые

Ветки

git switch -c feature/login     # создать и перейти
git switch -                    # вернуться на предыдущую ветку
git branch -d feature/login     # удалить слитую ветку
git push origin --delete feature/login   # удалить на сервере
git branch --sort=-committerdate # ветки по свежести

Отмена изменений

Ситуация Команда
Отменить незакоммиченные правки файла git restore <файл>
Убрать файл из индекса (после add) git restore --staged <файл>
Откатить последний коммит, оставив правки git reset --soft HEAD~1
Откатить коммит и правки (необратимо!) git reset --hard HEAD~1
Отменить коммит новым коммитом (для общих веток) git revert <sha>
Перестал отслеживать файл, оставив на диске git rm --cached <файл>

Rebase

git rebase main                  # перенести свою ветку на свежий main
git rebase -i HEAD~5             # интерактивно: squash / fixup / reword / drop
git rebase --abort               # передумал
git push --force-with-lease      # безопасный force push (никогда не --force)

Правило: rebase - только свои ветки. Общие - merge. Подробно: rebase vs merge.

Stash

git stash push -m "wip: форма логина"
git stash list
git stash pop                    # применить и удалить
git stash apply stash@{1}        # применить конкретный, не удаляя
git stash push -p                # спрятать выборочно

История и поиск

git log --oneline --graph -15
git log -p <файл>                # история изменений файла с диффами
git log -S "функция"             # коммиты, где строка появилась/исчезла
git blame -L 10,20 <файл>        # кто менял строки 10-20
git diff main...feature          # что добавит ветка
git show <sha>:<путь>            # файл из любого коммита

Спасение - reflog

git reflog                       # все движения HEAD за 90 дней
git reset --hard HEAD@{2}        # вернуться в состояние до катастрофы
git checkout -b rescue <sha>     # достать «потерянный» коммит в ветку

Алиасы

git config --global alias.st "status -sb"
git config --global alias.lg "log --oneline --graph -15"
git config --global alias.amend "commit --amend --no-edit"
git config --global alias.undo "reset --soft HEAD~1"

.gitignore за 10 секунд

node_modules/
.env
.env.*.local
dist/
build/
*.log
.DS_Store
.idea/

Уже закоммитил лишнее? git rm -r --cached <путь> + коммит. Секреты - ротировать. Подробно: .gitignore.