Перейти к основному содержимому

Команды Git для повседневной разработки

Разработчику Архитектору Инженеру
Связь с разделом 4

Первый проход по 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 fetchgit merge / git rebasepull = fetch + merge по умолчанию
Новая фичаgit switch -c feature/xСлияние через PR — 4.13/113
Срочно переключитьсяgit stash push -m "wip", git switch maingit 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@&#123;n&#125;Особенности работы с репозиториями в 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 addgit 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 напрямуюНет reviewfeature-ветка + PR (Модель ветвления GitFlow или GitHub Flow)
pull без commit/stashmerge поверх незакоммиченного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.