Команды Git для повседневной разработки
Первый проход по Git — в Основы работы с Git: workflow add/commit/push, ветки и запросы на слияние.
Карманный набор из 12 команд — шпаргалка 4.13/115.
Примеры команд с построчным разбором — лаборатория 1123. Эта статья дополняет курс расширенным справочником и короткими пояснениями "когда вызывать".
Команды Git для повседневной разработки
Эта страница — справочник подкоманд с короткими пояснениями "когда вызывать". Сжатый набор из 12 команд — 4.13/115#12-komand. Логика трёх зон (рабочий каталог → индекс → коммит) — в Архитектура системы контроля версий Git; флаги --hard, --force, --staged — в Настройка и параметры Git; восстановление после ошибок — Опасные скрипты и Особенности работы с репозиториями в Git.
Play ITЗагрузка интерактивного демо…
Типичный день разработчика в терминах команд:
clone/pull → правки → status → add → commit → push → (при необходимости) merge/rebase
Сценарии — какая команда нужна
| Задача | Команды | Примечание |
|---|---|---|
| Начать проект локально | git init, .gitignore, git add, git commit | Затем remote add + push (Безопасность кода) |
| Подключиться к чужому репо | git clone <url> | --depth 1 для CI, полный clone для истории |
| Увидеть, что изменилось | git status, git diff, git diff --staged | Три зоны — Архитектура системы контроля версий Git |
| Сохранить логический шаг | git add -p, git commit -m "..." | -p — часть файла в коммит |
| Отправить коллегам | git push origin <branch> | Перед push — pull или fetch + merge |
| Подтянуть чужие коммиты | git fetch → git merge / git rebase | pull = fetch + merge по умолчанию |
| Новая фича | git switch -c feature/x | Слияние через PR — 4.13/113 |
| Срочно переключиться | git stash push -m "wip", git switch main | git stash pop вернёт правки |
| Откатить файл | git restore path | Не трогает уже закоммиченное |
| Откатить последний коммит | git reset --soft HEAD~1 | --hard — Опасные скрипты |
| Пометить релиз | git tag -a v1.0.0 -m "...", git push origin v1.0.0 | Теги не push'ятся по умолчанию |
| Ошибка — найти коммит | git reflog, git branch rescue HEAD@{n} | Особенности работы с репозиториями в Git |
Основные команды
git init
Когда: новый проект с нуля, ещё нет remote. Инициализация создаёт .git в текущей папке (Внутреннее устройство Git).
git init
git init my-project
git status
Когда: перед каждым commit и после merge/rebase — понять, что попадёт в следующий снимок.
git status
git status -sb # коротко: ветка и +/- файлов
Расшифровка типичного вывода:
- Changes to be committed — уже в индексе (зелёный в многих UI);
- Changes not staged — правки на диске, нужен
git add; - Untracked — Git не следит;
git addили.gitignore.
git add
Когда: подготовить изменения к коммиту. git add . удобно, но рискованно — можно захватить .env или bin/.
git add README.md
git add -p src/ # интерактивно по hunks
git add -A # все изменения, включая удаления
Проверка перед commit: git diff --staged.
git commit
Фиксация изменений из индекса с сообщением через -m:
git commit -m "Добавил файл – это сообщение-комментарий."
git diff
Просмотр различий между рабочим каталогом, индексом и последним коммитом:
git diff
git diff --staged
git diff main..feature
git log
История коммитов с настраиваемым форматом:
git log --oneline --graph --decorate
git log -5 --stat
git push
Отправка локальных коммитов на удалённый репозиторий:
git push origin main
git pull
Когда: обновить текущую ветку с remote. На общей ветке предпочтительнее git pull --rebase, если так договорились в команде.
git pull origin main
git pull --rebase origin main
Конфликт после pull — правка файлов → git add → git rebase --continue или commit merge. Отмена rebase: git rebase --abort.
git branch
Создание, просмотр и удаление веток:
git branch
git branch feature/login
git branch -d feature/login
git checkout
Переключение ветки или восстановление файла из коммита:
git switch feature-branch
git checkout abc1234 -- path/to/file
git merge
git merge объединяет изменения из одной ветки в другую. При расхождении историй Git создаёт merge-коммит с двумя родителями и сохраняет обе линии коммитов. Альтернатива при подтягивании main в feature — git rebase, который переписывает ваши коммиты в линейную цепочку. Наглядные схемы и выбор подхода — в Ветвление и слияние (4.13/113).
git merge feature-branch
git reset
Когда: "отменить" коммиты или сбросить индекс. Режимы — Настройка и параметры Git.
git reset --soft HEAD~1 # убрать коммит, оставить staged
git reset --mixed HEAD~1 # по умолчанию: коммит + unstage, файлы на диске
git reset --hard HEAD~1 # опасно: совпадает с HEAD~1, локальные правки пропадут
После --hard — сразу git reflog, не git gc (Опасные скрипты).
git rm
Удаление файла из индекса и рабочего каталога:
git rm path/to/file
git rm --cached path/to/file
git mv
git mv – переименование или перемещение файлов в рабочем каталоге.
Пример:
git mv oldname.txt newname.txt
git stash
Временное сохранение незавершённой работы:
git stash push -m "WIP"
git stash pop
git tag
git tag создаёт метку на коммите:
git tag v1.0.0
git tag -a v1.0.1 -m "Release"
git fetch
Когда: посмотреть, что изменилось на сервере, не трогая рабочие файлы. Удобно перед code review или rebase.
git fetch origin
git log HEAD..origin/main --oneline
Слияние с локальной веткой — git pull (fetch + merge/rebase) или явно git merge origin/main после fetch.
git remote
Управление удалёнными репозиториями:
git remote -v
git remote add origin https://github.com/user/repo.git
git archive
git archive – создание архива текущего состояния репозитория без .git. Удобно для релизного пакета, который передают в безопасный контур или заказчику.
git archive --format=zip --output=project.zip main
git archive --format=tar.gz --output=release-v1.2.0.tar.gz v1.2.0
Полезно помнить:
- архив включает только tracked-файлы выбранного коммита/тега;
- untracked и ignored файлы не попадут в пакет;
- для воспроизводимого релиза лучше архивировать тег, а не ветку.
git submodule
git submodule – работа с подмодулями. Подмодуль фиксирует внешний репозиторий на конкретном commit hash.
git submodule add https://github.com/org/lib.git libs/lib
git submodule update --init --recursive
git submodule update --remote
Когда использовать:
- отдельная библиотека развивается в другом репозитории;
- нужно фиксировать точную версию внешнего кода в монорепо.
Типичная ошибка: после clone забывают git submodule update --init --recursive, из-за чего папки подмодулей пустые.
git show
Просмотр коммита, тега или объекта — сообщение, diff, автор, время.
git show HEAD
git show v1.0.0
git show --name-only HEAD
git show abc1234:path/to/file.py
Практика:
git show --statбыстро показывает, какие файлы затронуты;git show <commit>:<path>позволяет извлечь конкретный файл из прошлого без checkout всей ветки.
git shortlog
git shortlog – краткая история коммитов. Группирует коммиты по авторам.
git shortlog
git describe
git describe – описание текущего состояния. Показывает ближайший тег и количество коммитов после него.
git describe --tags
git describe --tags --dirty
Применение:
- формирование версии сборки (
v1.4.2-7-gabc1234); - маркировка nightly/CI-артефактов;
- быстрая проверка, собран ли код ровно с тега или уже с дополнительными коммитами.
git clone
Клонирование удалённого репозитория:
git clone https://github.com/user/repo.git
git clone --depth 1 https://github.com/user/repo.git
git config
Настройка Git (локально, глобально или для системы):
git config --global user.name "Имя"
git config --global user.email "you@example.com"
git config --list
git push --force-with-lease
Команда git push --force-with-lease — это безопасная альтернатива git push --force.
Она позволяет переписать историю удалённой ветки, но делает это с дополнительной проверкой, чтобы не затереть чужие изменения.
git push --force-with-lease
git push --force-with-lease origin feature/rebased-branch
То есть команда перезаписывает только если HEAD на сервере не изменился.
Когда использовать
— После git rebase или git commit --amend, когда история изменилась.
git commit --amend
— Когда работаете в команде и хотите сохранить чужие изменения.
— На pull request ветках — безопаснее, чем просто --force.
Типовой рабочий день (feature-ветка)
git fetch origin
git switch main
git pull origin main
git switch -c feature/TASK-123-login
# ... правки ...
git add -p
git commit -m "feat: форма входа с валидацией email"
git push -u origin feature/TASK-123-login
# Pull Request в UI → review → merge
git switch main
git pull origin main
git branch -d feature/TASK-123-login
После merge в remote локальную ветку можно удалить; история остаётся в main.
Частые ошибки
| Ошибка | Последствие | Что вместо |
|---|---|---|
git add . без просмотра | Секреты в коммите | git status, .gitignore, Методы защиты пользовательских и корпоративных данных |
commit на main напрямую | Нет review | feature-ветка + PR (Модель ветвления GitFlow или GitHub Flow) |
pull без commit/stash | merge поверх незакоммиченного | stash или commit WIP |
push --force на shared branch | Ломает историю коллег | --force-with-lease или revert |
Забыли git push --tags | Релиз без тега на сервере | git push origin v1.0.0 |
Шпаргалка — диагностика
git status -sb
git log --oneline -10 --graph --decorate
git remote -v
git branch -vv # tracking веток
git diff --stat
git reflog -10
Подробнее про объекты и .git — Внутреннее устройство Git; флаги — Настройка и параметры Git.