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

Настройка и параметры Git

Разработчику Архитектору Инженеру

Команды из Команды Git для повседневной разработки часто принимают флаги — короткие (-m) и длинные (--message). Один и тот же флаг в разных подкомандах может означать разное: -v у git push даёт подробный лог, а у голого git -v — версию программы. Ниже — частые флаги, уровни настроек git config и ссылки на опасные комбинации (Опасные скрипты).

Справка в терминале

git commit --help, git help reset — официальное описание флагов для конкретной подкоманды.


Настройка и параметры Git

Параметры

Play ITЗагрузка интерактивного демо…

В Git существуют параметры (флаги), которые можно использовать с командами для изменения их поведения.

Короткие параметры начинаются с одного дефиса (-) и состоят из одной буквы.

Длинные параметры начинаются с двух дефисов (--) и обычно являются полными словами.

Несколько коротких флагов можно объединять: git commit -am "msg" = -a + -m (только для уже отслеживаемых файлов).


Справочник основных флагов

Вывод и диагностика

  1. -v / --verbose — больше деталей в выводе конкретной команды (git push -v, git fetch -v). У git без подкоманды -v — версия.
  2. --dry-run — показать, что произойдёт, без изменений (git clean -n, git push --dry-run где поддерживается).
  3. --help — справка по подкоманде; для новичка самый надёжный источник.
git commit --help

Коммиты и сообщения

  1. -m / --message — текст коммита в одну строку.
  2. --amend — изменить последний коммит (добавить файлы или поправить сообщение). На уже отправленную ветку — только с согласованием и часто с --force-with-lease (Команды Git для повседневной разработки).
git commit --amend -m "Исправлено сообщение"

Охват файлов и веток

  1. -a / --all — в git commit -a автоматически stage уже отслеживаемых файлов; в git branch -a — показать remote-ветки.
git branch -a
  1. --cached / --staged — сравнение или операции с индексом, без рабочего каталога (git diff --staged).
  2. -p / --patch — интерактивный выбор кусков diff при add или checkout -p.

Сброс и риск потери данных

  1. --soft — при reset двигает HEAD, оставляет индекс и рабочие файлы (git reset --soft HEAD~1).
  2. --hard — сбрасывает индекс и рабочую копию к указанному коммиту; незакоммиченное пропадает. Сначала git status, при ошибке — git reflog (Опасные скрипты, Особенности работы с репозиториями в Git).
  3. --force / -f — принудительное действие (push, clean, branch -D). В общих ветках предпочтительнее --force-with-lease.
git push --force-with-lease origin feature-x

История и слияния

  1. --oneline — компактный git log.
  2. --graph — ASCII-граф веток в log.
  3. --follow — история файла с учётом переименований (git log --follow -- path).
  4. --no-ff — merge-коммит даже при fast-forward (сохранить ветку в истории).
  5. --squash — все коммиты ветки в один при merge (без автоматического коммита до git commit).
  6. --rebase — у pull: rebase вместо merge; у merge не путать с git rebase.

Прочие

  1. --global / --local / --system — область действия git config (см. ниже).
  2. --tags — включить теги при push / fetch.
  3. --recurse-submodules — обход подмодулей при clone, pull, checkout.

Уровни git config

Настройки Git наследуются: systemgloballocal (.git/config перекрывает остальное).

УровеньФайл (типично)Когда использовать
--system/etc/gitconfigПолитика на всех пользователей машины (редко)
--global~/.gitconfigИмя, email, алиасы, редактор
--local.git/configRemote, хуки, core.sshCommand для одного проекта

Минимум при первой установке:

git config --global user.name "Имя Фамилия"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global core.autocrlf true # Windows; на Linux — input
git config --global color.ui auto

Просмотр всех значений:

git config --list --show-origin

Локально для репозитория с отдельным SSH-ключом (см. Множественные сервисы Git на одном компьютере):

git config --local core.sshCommand "ssh -i ~/.ssh/id_ed25519_work -o IdentitiesOnly=yes"

Типичные путаницы

СитуацияЧто помнить
git commit -aНе добавляет новые неотслеживаемые файлы — нужен git add
git reset --hard vs git restore .reset двигает ветку; restore откатывает файлы к HEAD
git pullЭто fetch + merge/rebase; при конфликтах — 4.13 / 113
-f на cleanУдаляет неотслеживаемое; -fdx ещё и игнорируемое — см. Опасные скрипты

Связанные материалы


Готовые комбинации флагов

ЦельКоманда
Коммит всего отслеживаемогоgit commit -am "msg"
Посмотреть, что уйдёт в pushgit log origin/main..HEAD --oneline
Красивый логgit log --oneline --graph --decorate -20
Отменить staging одного файлаgit restore --staged path
Merge без fast-forwardgit merge --no-ff feature/x
Rebase с автосохранением метокgit rebase -i main (осторожно на pushed)
Push после rebasegit push --force-with-lease
Проверить clean без удаленияgit clean -fdn (-n = dry-run)
Клон для CIgit clone --depth 1 --branch main

git config — частые ключи

git config --global init.defaultBranch main
git config --global pull.rebase false # или true по политике команды
git config --global fetch.prune true # чистить мёртвые remote-ветки
git config --global core.longpaths true # Windows, длинные пути
git config --global core.hooksPath .githooks # общие хуки в репо ([Особенности работы с репозиториями в Git](./113.md))

Просмотр одного ключа: git config --get user.email.