Справочник команд Git
Полный справочник команд Git, классифицированный по категориям для быстрого поиска
Базовые команды(13)
Создать новый Git репозиторий в текущем каталоге
Клонировать удалённый репозиторий локально
Неглубокое клонирование, получить только последний коммит
Добавить файл в индекс
Добавить все изменения в индекс
Закоммитить изменения из индекса
Изменить последний коммит
Показать текущее состояние репозитория
Показать незакоммиченные изменения
Показать изменения в индексе
Показать все настройки
Установить глобальное имя пользователя
Установить глобальный email
Управление ветками(14)
Показать все локальные ветки
Показать все ветки (включая удалённые)
Создать новую ветку
Удалить ветку
Переименовать ветку
Переключить ветку
Создать и переключиться на новую ветку
Переключить ветку (Git 2.23+)
Создать и переключиться на новую ветку (Git 2.23+)
Слить указанную ветку в текущую
Слить ветку и создать merge-коммит
Rebase текущей ветки на указанную
Продолжить rebase после разрешения конфликта
Выбрать конкретный коммит для слияния в текущую ветку
Удалённые операции(10)
Показать информацию об удалённом репозитории
Добавить удалённый репозиторий
Получить последнее содержимое из удалённого репозитория
Получить обновления всех удалённых репозиториев
Получить и слить удалённую ветку
Получить и сделать rebase
Отправить в удалённый репозиторий
Принудительно отправить (использовать осторожно)
Отправить и установить upstream-ветку
Удалить удалённую ветку
Отмена изменений(8)
Отменить индексацию файла
Отменить последний коммит, сохранив изменения
Отменить коммит и индексацию, сохранив рабочую директорию
Отменить коммит и отбросить все изменения
Отменить указанный коммит (создать новый коммит)
Восстановить файл в рабочей директории (Git 2.23+)
Отменить индексацию файла (Git 2.23+)
Удалить неотслеживаемые файлы и каталоги
Управление тегами(6)
Показать все теги
Создать лёгкий тег
Создать аннотированный тег
Удалить локальный тег
Отправить тег в удалённый репозиторий
Отправить все теги в удалённый репозиторий
История(7)
Показать историю коммитов
Компактный просмотр истории коммитов
Графическое отображение истории всех веток
Показать детали коммита
Показать историю изменений каждой строки файла
Показать всю историю операций
Начать бинарный поиск проблемного коммита
Stash(7)
Сохранить текущие изменения в stash
Сохранить изменения в stash с сообщением
Показать все stash
Применить и удалить последний stash
Применить последний stash без удаления
Удалить последний stash
Удалить все stash
Что такое Git?
Шпаргалка Git — это быстрый справочник по командам контроля версий, сгруппированный по задачам. Git является распределенной системой: каждый clone содержит историю проекта, ветки являются легкими указателями, а commit фиксирует, как кодовая база менялась со временем. Шпаргалка полезна, когда понятен рабочий сценарий, но забыта точная команда: посмотреть staged-изменения, создать ветку, отменить commit, спрятать работу в stash, поставить тег релиза или синхронизироваться с remote. Это справочник, а не замена пониманию состояния репозитория. Опасные команды вроде reset --hard, clean -fd, rebase и force push нужно копировать только после проверки незакоммиченных изменений, текущей ветки и влияния на удаленный репозиторий.
Руководство по использованию
Быстрая справка
- Нажмите на карточку команды, чтобы скопировать команду
- Используйте поле поиска для быстрого нахождения нужных команд
- Нажмите на теги категорий для фильтрации по типу
- Наведите курсор на команды, чтобы увидеть подробные описания
Возможности
Продвинутые советы
- Используйте git restore --staged для отмены добавления файлов в индекс
- Используйте git commit --amend для изменения последнего коммита
- Используйте git stash для временного сохранения рабочего прогресса
- Используйте git revert для отмены опубликованных коммитов
Применение
Технический принцип
Локальные изменения проходят через три области: рабочую директорию, индекс (также называемый областью подготовки, хранящийся в .git/index) и базу объектов. git add записывает хэши blob'ов в индекс, git commit замораживает индекс в новый объект tree и commit, а git checkout/switch обновляет индекс и рабочее дерево до целевого коммита. Слияния делятся на две категории: fast-forward просто продвигает указатель ветки, когда цель является прямым потомком, а трёхсторонние слияния (стратегия recursive или ort) вычисляют общего предка и создают merge-коммит с двумя родителями. git rebase переписывает историю, воспроизводя коммиты по одному на новое основание, создавая новые SHA.
Синхронизация с удалённым репозиторием работает по протоколу HTTPS smart protocol, SSH или устаревшему протоколу git://, обмениваясь pack-файлами, генерируемыми дельта-сжатием. После fetch Git хранит снимок под refs/remotes/origin/*, а reflog в .git/logs/ сохраняет 90-дневную историю отмен по умолчанию (gc.reflogExpire), поэтому даже reset --hard или неудачный rebase можно восстановить до того, как сборщик мусора удалит недостижимые объекты.
- Модель объектов: blob, tree, commit, tag — адресация по SHA-1 (или SHA-256 с версии 2.29), хранение в виде отдельных файлов в .git/objects/xx/ или упакованных в .git/objects/pack/*.pack
- Индекс/подготовка: .git/index — бинарный файл, сопоставляющий путь → хэш blob + информация stat; git add обновляет его, git commit замораживает в tree
- Ссылки и HEAD: refs/heads/<branch>, refs/remotes/<remote>/<branch>, refs/tags/<tag> — обычные файлы, содержащие SHA; HEAD — символическая ссылка на текущую ветку
- Стратегии слияния: fast-forward, когда цель является потомком, иначе трёхстороннее рекурсивное/ort-слияние с использованием merge base; --no-ff принудительно создаёт merge-коммит
- Перезапись при rebase: git rebase воспроизводит коммиты на новое основание, создавая новые SHA и нарушая общую историю при push — поэтому --force-with-lease предпочтительнее --force
- Восстановление через reflog: .git/logs/HEAD и логи по ссылкам хранят перемещения ссылок 90 дней (gc.reflogExpire); git reflog + git reset восстанавливает после деструктивных операций
- Транспорт: smart HTTPS, SSH или git:// обмениваются pack-файлами через протокол upload-pack/receive-pack; неглубокие клоны используют --depth для ограничения истории
Примеры
Создать и переключиться на новую ветку
git checkout -b feature/login # Создать и переключиться на новую веткуОтменить изменения в рабочей директории
git restore filename # Восстановить файл до последнего закоммиченного состоянияПросмотр истории коммитов
git log --oneline --graph --all # Графически показать историю всех ветокЧасто задаваемые вопросы
Как отменить последний коммит?
git reset --soft HEAD~1 оставляет изменения в индексе, чтобы вы могли закоммитить их заново; git reset --mixed HEAD~1 оставляет их в рабочей копии, но без индекса; git reset --hard HEAD~1 выбрасывает их совсем. Если коммит уже запушен, используйте git revert HEAD — он создаст новый коммит, отменяющий изменения, не переписывая историю.
В чём разница между git pull и git fetch?
git fetch только скачивает коммиты с удалённого репозитория в локальные ссылки — рабочую ветку он не трогает. git pull эквивалентен git fetch, за которым идёт git merge (или git rebase, если задан --rebase). Используйте fetch, когда хотите сначала посмотреть изменения сверху, прежде чем их вмерживать.
Как отменить локальные изменения файла?
git restore <file> сбрасывает незакоммиченные правки в рабочей копии; git restore --staged <file> убирает файл из индекса, не теряя его содержимого; git checkout HEAD -- <file> восстанавливает версию из последнего коммита. Для неотслеживаемых файлов используйте git clean -f или -fd, чтобы удалить и каталоги.
Когда выбирать rebase, а когда merge?
Rebase — когда вы хотите получить линейную историю на личной фича-ветке перед её вливанием. Merge — когда интегрируете общую ветку и важно сохранить реальную историю разработки. Никогда не делайте rebase коммитов, которые уже запушены в общую ветку, без согласия команды — это переписывает SHA и ломает чужие клоны.
Как посмотреть, что будет запушено?
git log @{u}.. показывает коммиты вашей ветки, которых нет в апстриме. git diff @{u} даёт совокупный diff. После git fetch команда git status относительно origin покажет, насколько вы впереди и позади.
Как восстановить удалённую ветку или потерянный коммит?
git reflog показывает все позиции, в которых был HEAD; найдите SHA нужного коммита и выполните git checkout <sha> или git branch <name> <sha>. Записи reflog по умолчанию хранятся около 90 дней до сборки мусора, так что лучше делать это сразу после ошибки.
Как безопаснее всего исправить коммит?
git commit --amend позволяет изменить сообщение последнего коммита или добавить забытые файлы. Команда переписывает SHA, поэтому делайте это только с локальными коммитами, которые ещё не были запушены. Если приходится править уже запушенный коммит, пушьте с --force-with-lease (а не --force), чтобы не затереть обновления коллег.