Git - система контроля версий: она запоминает каждое сохранённое состояние проекта, позволяет вернуться к любому из них и вести несколько линий разработки параллельно. Каждый день нужен десяток команд, остальные открывают раз в месяц и забывают. Здесь собраны основные команды Git с примерами: от первой настройки до веток, слияния и отмены ошибок. Шпаргалка подходит для Linux, macOS и Windows (в Git Bash, PowerShell или командной строке команды одинаковые).
Как устроен Git за минуту
Чтобы команды не казались заклинаниями, достаточно понять три места, где живут изменения:
- Рабочая папка - файлы, которые вы правите в редакторе.
- Индекс (staging area) - «корзина» изменений, которые войдут в следующий коммит. Туда их кладёт
git add. - Репозиторий - история коммитов в скрытой папке
.git. Туда изменения попадают послеgit commit.
Коммит - это снимок проекта с автором, датой и сообщением. У каждого коммита есть хеш вроде c4e02fb, по нему к коммиту можно обратиться в любой команде. Ветка - просто подвижный указатель на последний коммит линии разработки, поэтому создаются и удаляются ветки мгновенно.
Удалённый репозиторий (GitHub, GitLab, Gitea, свой сервер) - копия истории на другом компьютере. С ним обмениваются коммитами командами push, pull и fetch.
Установка и первая настройка
Проверить, установлен ли Git:
git --version
Если команда не найдена, установите Git:
- Windows - установщик с git-scm.com, вместе с ним ставится Git Bash.
- macOS -
xcode-select --installилиbrew install git. - Debian и Ubuntu -
sudo apt install git, Fedora -sudo dnf install git. Подробнее о пакетных менеджерах - в статье про управление пакетами в Linux.
Один раз после установки укажите имя и почту. Они записываются в каждый коммит:
git config --global user.name "Иван Петров"
git config --global user.email "ivan@example.com"
git config --global init.defaultBranch main
Последняя строка делает основную ветку новых репозиториев main вместо старого master. Посмотреть все настройки можно командой git config --list.
Создать репозиторий или скачать готовый
| Команда | Что делает |
|---|---|
git init |
Превращает текущую папку в репозиторий (создаёт .git) |
git clone URL |
Скачивает удалённый репозиторий целиком, со всей историей |
git clone URL папка |
То же, но в папку с указанным именем |
git clone --depth 1 URL |
Скачивает только последний коммит, без истории - быстро для больших проектов |
mkdir site && cd site
git init
Основной цикл: status, add, commit
Почти вся работа - это повторение трёх шагов: посмотреть, что изменилось, добавить нужное в индекс и сохранить коммит.
git status
git add index.html style.css
git commit -m "Первая версия сайта"
git status - самая полезная команда, запускайте её всегда, когда не уверены. Она показывает текущую ветку, файлы в индексе, изменённые и новые файлы, а ещё подсказывает, какой командой отменить действие.

| Команда | Что делает |
|---|---|
git add файл |
Добавляет изменения файла в индекс |
git add . |
Добавляет все изменения в текущей папке и ниже |
git add -p |
Показывает изменения кусками и спрашивает, какие добавить |
git commit -m "текст" |
Создаёт коммит из индекса |
git commit -am "текст" |
Добавляет все изменённые отслеживаемые файлы и сразу коммитит (новые файлы не попадут) |
git commit --amend |
Исправляет последний коммит: сообщение или забытый файл |
git rm файл |
Удаляет файл с диска и из репозитория |
git mv старое новое |
Переименовывает или перемещает файл |
Сообщение коммита пишите так, чтобы через полгода было понятно, что сделано: «Исправлен расчёт доставки», а не «правки».
Смотрим изменения и историю
| Команда | Что показывает |
|---|---|
git diff |
Изменения в рабочей папке, которые ещё не в индексе |
git diff --staged |
Изменения в индексе, которые войдут в коммит |
git diff main..feature |
Разницу между двумя ветками |
git log |
Историю коммитов с автором и датой |
git log --oneline |
Историю в одну строку на коммит |
git log --oneline --graph --all |
Историю всех веток в виде графа |
git log -p файл |
Все изменения конкретного файла |
git show хеш |
Содержимое одного коммита |
git blame файл |
Кто и в каком коммите менял каждую строку |
В выводе git diff удалённые строки начинаются с минуса, добавленные - с плюса:

Если история не помещается на экран, Git открывает её в просмотрщике: листать стрелками или пробелом, выйти клавишей q.
Ветки: создать, переключиться, слить
Ветки нужны, чтобы делать новую функцию или исправление, не ломая рабочую версию. Обычный порядок такой:
git switch -c feature/menu # создать ветку и перейти в неё
# ...правим файлы...
git commit -am "Добавлено меню"
git switch main # вернуться в основную ветку
git merge feature/menu # влить изменения
git branch -d feature/menu # удалить ветку, она больше не нужна
| Команда | Что делает |
|---|---|
git branch |
Список локальных веток, текущая отмечена звёздочкой |
git branch -a |
Локальные и удалённые ветки |
git branch имя |
Создаёт ветку, но не переключается в неё |
git switch имя |
Переключается в ветку |
git switch -c имя |
Создаёт ветку и сразу переключается |
git checkout имя |
Старый способ переключения, работает и сейчас |
git merge ветка |
Вливает ветку в текущую |
git rebase main |
Переносит коммиты текущей ветки поверх свежего main |
git branch -d имя |
Удаляет слитую ветку |
git branch -D имя |
Удаляет ветку принудительно, даже неслитую |
Команды git switch и git restore появились в Git 2.23 как понятная замена перегруженной git checkout. В старых инструкциях вы встретите checkout, она делает то же самое.
Так выглядит история после слияния: ветка feature/menu ответвилась, получила свой коммит и вернулась в main коммитом слияния.

Если при слиянии возник конфликт
Конфликт бывает, когда в обеих ветках изменили одни и те же строки. Git останавливается и помечает такие места в файле:
<<<<<<< HEAD
<h1>Главная</h1>
=======
<h1>Добро пожаловать</h1>
>>>>>>> feature/menu
Оставьте нужный вариант, удалите служебные строки с <<<<<<<, ======= и >>>>>>>, затем:
git add index.html
git commit
Передумали сливать - git merge --abort вернёт всё как было до слияния.
Работа с удалённым репозиторием
| Команда | Что делает |
|---|---|
git remote -v |
Показывает подключённые удалённые репозитории |
git remote add origin URL |
Подключает удалённый репозиторий под именем origin |
git push -u origin main |
Первая отправка ветки, связывает её с удалённой |
git push |
Отправляет новые коммиты текущей ветки |
git fetch |
Скачивает новые коммиты, но не меняет ваши файлы |
git pull |
Скачивает и сразу вливает изменения в текущую ветку |
git pull --rebase |
То же, но ставит ваши коммиты поверх чужих, без лишнего коммита слияния |
git push origin --delete имя |
Удаляет ветку на сервере |
Если git push отвечает rejected и fetch first, значит, на сервере есть коммиты, которых нет у вас. Сначала выполните git pull, потом снова git push.
Как отменить изменения
Это раздел, ради которого шпаргалку чаще всего открывают. Выбирайте команду по тому, где сейчас лежит ошибка.
| Ситуация | Команда |
|---|---|
| Испортил файл, хочу вернуть как в последнем коммите | git restore файл |
| Добавил файл в индекс по ошибке | git restore --staged файл |
| Опечатка в сообщении последнего коммита (ещё не отправлен) | git commit --amend -m "новый текст" |
| Отменить последний коммит, но сохранить изменения | git reset --soft HEAD~1 |
| Удалить последний коммит вместе с изменениями | git reset --hard HEAD~1 |
| Отменить коммит, который уже отправлен на сервер | git revert хеш |
| Удалить все неотслеживаемые файлы | git clean -n (посмотреть), затем git clean -f |
Главное правило: reset и --amend переписывают историю, поэтому их применяют только к коммитам, которые вы ещё не отправили. Для опубликованных коммитов есть git revert: он создаёт новый коммит, обратный ошибочному, и никому не ломает историю.
git reset --hard и git restore удаляют несохранённые правки без возврата. Если сомневаетесь, сначала сделайте git stash.
Если коммит пропал после неудачного reset, его почти всегда можно найти: git reflog показывает все положения веток за последние недели. Найдите нужный хеш и выполните git reset --hard хеш.
Отложить работу: git stash
Бывает, что нужно срочно переключиться на другую ветку, а текущие правки ещё не готовы для коммита. Их можно временно спрятать:
| Команда | Что делает |
|---|---|
git stash |
Прячет незакоммиченные изменения и очищает рабочую папку |
git stash -u |
То же, включая новые неотслеживаемые файлы |
git stash list |
Список отложенных изменений |
git stash pop |
Возвращает последние отложенные изменения и удаляет их из списка |
git stash apply |
Возвращает изменения, но оставляет их в списке |
git stash drop |
Удаляет последнюю запись из списка |
Метки версий: git tag
Метки отмечают коммиты, которые стали релизами:
git tag -a v1.0 -m "Первый релиз"
git push origin v1.0
git tag # список меток
Файл .gitignore
Чтобы Git не предлагал добавить мусор (логи, сборки, папку зависимостей, файлы с паролями), перечислите его в файле .gitignore в корне проекта:
node_modules/
dist/
*.log
.env
.DS_Store
.gitignore действует только на файлы, которые ещё не отслеживаются. Если файл уже попал в репозиторий, уберите его из индекса, не удаляя с диска: git rm --cached файл.
Полезные алиасы
Длинные команды можно сократить. Например, после этих строк git st будет работать как git status, а git lg покажет граф истории:
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
Короткая шпаргалка на каждый день
| Задача | Команда |
|---|---|
| Что изменилось | git status, git diff |
| Сохранить работу | git add . и git commit -m "..." |
| Новая ветка | git switch -c имя |
| Влить ветку | git switch main и git merge имя |
| Получить чужие изменения | git pull |
| Отправить свои | git push |
| Вернуть файл | git restore файл |
| Отменить отправленный коммит | git revert хеш |
| Найти потерянный коммит | git reflog |
Полное описание каждой команды есть во встроенной справке: git help команда или git команда -h для краткой версии.





Комментарии
Комментариев пока нет - будьте первым.