Шпаргалка по git

2.47

Команды git, к которым вы будете обращаться каждый день

Русский: 2026-03-29

Git — один из тех инструментов, с которым можно обходиться примерно 15 командами годами — а потом однажды случайно сделать rebase main-ветки и внезапно пожалеть, что не выучил ещё пару. Эта шпаргалка — та самая «пара» без панических атак.

Вот что никто не говорит вам в начале: git — это по сути направленный ацикличный граф снимков. Каждый commit — это снимок, каждый branch — указатель, а HEAD — просто стикер с надписью «вы здесь». Как только это щёлкнет, всё остальное — rebase, cherry-pick, reset — перестаёт казаться чёрной магией и начинает ощущаться как перемещение стикеров.

Мы организовали шпаргалку по рабочим процессам, а не по алфавиту, потому что никто не думает «мне нужна команда на букву R». Вы думаете «мне нужно отменить последний commit» или «мне нужно забрать branch коллеги». Начните с раздела «Базовый рабочий процесс», если вы только разбираетесь. Потом разветвляйтесь (каламбур полностью намеренный) по мере привыкания. Разделы Stash и Reset будут спасать вас минимум раз в неделю.

Одно золотое правило: commit рано, commit часто. Маленькие commit легко ревьюить, легко откатывать и легко понимать через шесть месяцев, когда вы читаете git log и гадаете, о чём думал прошлый-вы.

Базовый рабочий процесс
git init
Создать новый репозиторий в текущей директории
git clone <url>
Скачать репозиторий вместе со всей историей
git status
Показать изменённые, staged и untracked файлы
git add <file>
Добавить конкретный файл в staging для следующего commit
git add .
Добавить все изменения в текущей директории в staging
git commit -m "<msg>"
Зафиксировать staged-изменения с сообщением
git push
Загрузить локальные commit на remote
git pull
Забрать и смержить remote-изменения в вашу ветку
Ветвление
git branch
Показать все локальные ветки
git branch -a
Показать локальные и remote ветки
git branch <name>
Создать новую ветку (оставаясь на текущей)
git switch <name>
Переключиться на существующую ветку
git switch -c <name>
Создать новую ветку и переключиться на неё
git branch -d <name>
Удалить ветку (безопасно — блокирует, если не смержена)
git branch -D <name>
Принудительно удалить ветку, даже если не смержена
git branch -m <new>
Переименовать текущую ветку
Merge и Rebase
git merge <branch>
Смержить ветку в вашу текущую ветку
git merge --no-ff <branch>
Смержить с merge commit, даже если возможен fast-forward
git rebase <branch>
Переиграть ваши commit поверх другой ветки
git rebase --abort
Отменить rebase в процессе и восстановить исходное состояние
git rebase --continue
Продолжить rebase после разрешения конфликтов
git merge --abort
Отменить merge в процессе
git cherry-pick <hash>
Применить отдельный commit из другой ветки
Stash
git stash
Временно отложить все незафиксированные изменения
git stash -u
Stash включая untracked файлы
git stash pop
Восстановить последний stash и удалить его
git stash apply
Восстановить последний stash, но сохранить его в списке
git stash list
Показать все сохранённые наборы изменений
git stash drop
Удалить последний stash
git stash drop stash@{n}
Удалить конкретный stash по индексу
Log и Diff
git log
Показать историю commit для текущей ветки
git log --oneline
Компактная история: один commit — одна строка
git log --graph --oneline
Показать историю веток в виде ASCII-графа
git diff
Показать unstaged-изменения относительно последнего commit
git diff --staged
Показать staged-изменения относительно последнего commit
git diff <branch1> <branch2>
Сравнить две ветки
git show <hash>
Показать изменения в конкретном commit
git log -p <file>
Показать полную историю изменений файла
Reset и Revert
git reset <file>
Убрать файл из staging, сохранив изменения
git reset HEAD~1
Отменить последний commit, сохранив изменения в staging
git reset --soft HEAD~1
Отменить последний commit, сохранив изменения в staging (явно)
git reset --hard HEAD~1
Отменить последний commit и безвозвратно удалить все изменения
git revert <hash>
Создать новый commit, отменяющий предыдущий
git checkout -- <file>
Отбросить unstaged-изменения конкретного файла
git restore <file>
Отбросить unstaged-изменения (современный синтаксис)
git restore --staged <file>
Убрать файл из staging (современный синтаксис)
Remotes
git remote -v
Показать все remote с их URL
git remote add <name> <url>
Добавить новый remote-репозиторий
git fetch
Скачать remote-изменения без merge
git fetch --prune
Fetch и удалить устаревшие remote-tracking ветки
git pull --rebase
Подтянуть remote-изменения и сделать rebase вашей работы поверх
git push -u origin <branch>
Push ветки и настроить отслеживание remote
git push origin --delete <branch>
Удалить remote-ветку
Теги
git tag
Показать все теги
git tag <name>
Создать лёгкий тег на текущем commit
git tag -a <name> -m "<msg>"
Создать аннотированный тег с сообщением
git push --tags
Отправить все локальные теги на remote
git tag -d <name>
Удалить локальный тег
git push origin --delete <tag>
Удалить remote-тег

Используйте git switch и git restore вместо git checkout. Команда checkout делает слишком много вещей — switch работает с ветками, restore — с файлами. Более чёткое намерение, меньше ошибок.

Запускайте git pull --rebase вместо простого git pull, чтобы сохранить историю линейной. Ещё лучше — сделайте это по умолчанию: git config --global pull.rebase true.

Допустили опечатку в последнем commit-сообщении? git commit --amend -m "исправленное сообщение" перезапишет его. Только не амендите commit, которые вы уже запушили — это переписывает историю, от которой могут зависеть ваши коллеги.

Используйте git stash -u вместо просто git stash. Флаг -u включает untracked файлы, и это почти всегда то, что вам нужно. Без него новые файлы, которые вы ещё не добавили, останутся позади.

git reflog — ваша машина времени. Даже после неудачного reset --hard ваши commit не пропадают окончательно примерно 30 дней. Запустите git reflog, найдите нужный хэш и выполните git reset --hard <hash> для восстановления.

Перед большим merge или rebase создайте «страховочную ветку»: git branch backup-before-merge. Если всё пойдёт наперекосяк, вы всегда сможете вернуться к исходной точке. Дешёвая страховка.

Используйте git log --oneline --graph --all для визуализации всей топологии веток в терминале. Это самый быстрый способ понять, что происходит в репозитории с несколькими активными ветками.

Related Tools