3.11.4 Распределенная система управления версиями git
Установка
Синтаксис
Опции
Команды утилиты
Навигация по командам
.gitignore — игнорирование файлов
Пример работы
Окружение
- Версия ОС: 8
- Конфигурация ОС: Рабочая станция
- Редакция ОС: Стандартная, Образовательная
- Версия ПО: git-2.53.0-1
Git — распределённая система контроля версий, предназначенная для отслеживания изменений в файлах, организации совместной работы над проектами и управления исходным кодом. Git позволяет нескольким разработчикам одновременно работать над одним проектом, сохраняя полную историю изменений и обеспечивая возможность отката к любому предыдущему состоянию.
В Git выделяют три основных состояния данных:
-
рабочая директория — файлы в файловой системе, непосредственно доступные для редактирования;
-
индекс — промежуточная область, в которой формируется набор изменений для последующей фиксации;
-
история (repository) — совокупность зафиксированных коммитов, хранящая полную историю изменений.
Файлы в Git делятся на три категории:
Отслеживаемые — файлы, которые Git уже сохраняет в истории. Изменения в них фиксируются при коммитах.
Неотслеживаемые — файлы, которые Git видит в рабочей директории, но не сохраняет в истории. Чтобы начать отслеживать файл, используйте команду
git add.Игнорируемые — файлы, скрытые от Git с помощью файла .gitignore. Git не показывает их в статусе и не предлагает добавить.
Установка
В РЕД ОС утилита git установлена по умолчанию. Если утилита не установлена, выполните команду для установки:
sudo dnf install git
Синтаксис
Git доступен для запуска через терминал при помощи команды следующего вида:
git [<опции>] <команда> [<аргументы>]
Опции
Основные опции утилиты:
-
-v,--version— выводит версию утилиты git; -
-h,--help— выводит справку об утилите git; -
-C <путь>— запускает git так, как если бы он был запущен из указанной директории; -
-c <имя>=<значение>— передаёт временную конфигурационную переменную, переопределяющую значения в файлах конфигурации; -
--exec-path[=<путь>]— выводит путь к вспомогательным исполняемым файлам git; -
--bare— рассматривает репозиторий без рабочей директории; -
--no-pager— отключает использование постраничного вывода; -
--git-dir=<путь>— задаёт путь к директории .git; -
--work-tree=<путь>— задаёт путь к рабочей директории.
Для получения общей справки по git выполните команду:
git --help
Для получения справки по определенной команде выполните:
git --help <команда>
Команды утилиты
Основные команды утилиты:
| Команда | Назначение |
|---|---|
git init
|
Создание нового репозитория в текущей директории. |
git clone
|
Клонирование удалённого репозитория в локальную директорию. |
git add
|
Добавление содержимого файлов в индекс для последующего коммита. |
git commit
|
Фиксация изменений, добавленных в индекс, создавая новый коммит. |
git status
|
Отображение состояния рабочей директории и индекса. |
git log
|
Просмотр истории коммитов. |
git diff
|
Показ различий между коммитами, ветками, индексом и рабочей директорией. |
git branch
|
Управление ветками (создание, удаление, переименование, просмотр). |
git checkout
|
Переключение между ветками и восстановление файлов (устаревшая команда). |
git switch
|
Переключение между ветками (современная альтернатива checkout).
|
git merge
|
Объединение изменений из одной или нескольких веток в текущую ветку. |
git rebase
|
Изменение базового коммита для текущей ветки. |
git pull
|
Получение изменений из удалённого репозитория и объединение с текущей веткой. |
git push
|
Отправка изменений из локального репозитория в удалённый. |
git fetch
|
Загрузка изменений из удалённого репозитория без слияния. |
git remote
|
Управление удалёнными репозиториями. |
git reset
|
Отмена изменений с перемещением HEAD (последний коммит текущей ветки), индекса и рабочей директории. |
git revert
|
Безопасная отмена коммита (создаёт новый коммит). |
git stash
|
Временное сохранение незавершённых изменений в стеке. |
git tag
|
Управление тегами (метками версий). |
git config
|
Просмотр и изменение настроек Git. |
git grep
|
Поиск по содержимому файлов в репозитории. |
git blame
|
Показ автора последнего изменения для каждой строки файла. |
git clean
|
Удаление неотслеживаемых файлов из рабочей директории. |
git cherry-pick
|
Перенос отдельных коммитов из одной ветки в другую. |
git bisect
|
Бинарный поиск коммита, внесшего ошибку. |
git restore
|
Восстановление файлов рабочей директории (альтернатива checkout).
|
git worktree
|
Управление несколькими рабочими деревьями, связанными с одним репозиторием. |
git show
|
Показ информации о коммите (изменения и метаданные). |
git mv
|
Перемещение или переименование файла с автоматическим добавлением в индекс. |
git rm
|
Удаление файла из рабочей директории и индекса. |
Навигация по командам
Ниже представлены основные команды Git. Нажмите на кнопку, чтобы перейти к описанию команды:
init
clone
add
commit
branch
checkout
switch
merge
remote
push
pull
log status
diff reset
stash
config
Команда init
Вернуться к навигации
init — инициализирует локальный репозиторий Git в текущей директории. При инициализации Git создаёт в текущем каталоге скрытую директорию .git, где хранит все объекты и ссылки истории проекта. Именно наличие этой директории превращает обычный каталог в Git-репозиторий. Для создания репозитория используйте git init или git clone, но не одновременно.
Синтаксис
Синтаксис команды имеет вид:
git init [<опции>]
Опции
Основные опции команды:
-
-q,--quiet— выводит только сообщения об ошибках и предупреждения; -
--bare— создаёт репозиторий без рабочей директории; -
--template=<шаблон>— задаёт путь к директории с шаблонами файлов для копирования в.git; -
--separate-git-dir=<git-dir>— создаёт репозиторий, но размещает директорию.gitв другом месте, создавая вместо неё ссылку; -
--object-format=<формат>— задаёт формат хранения объектов; -
--ref-format=<формат>— задаёт формат хранения ссылок; -
-b <имя_ветки>,--initial-branch=<имя_ветки>— задаёт имя основной ветки (по умолчаниюmasterилиmain); -
--shared[=(false|true|umask|group|all|world|everybody|0xxx)]— задаёт права доступа к репозиторию для совместной работы; -
<директория>— путь к директории, где создаётся репозиторий (если не указан, используется текущая).
Пример работы
Команда создаёт новый пустой Git-репозиторий в текущей директории и устанавливает main в качестве имени основной ветки вместо стандартного master. После выполнения в директории появляется скрытая директория .git, готовая к отслеживанию изменений:
mkdir <название_проекта> cd <название_проекта> git init
где:
-
mkdir <название_проекта>— создание каталога проекта; -
cd <название_проекта>— переход в каталог проекта; -
git init— инициализация пустого репозитория.
Команда clone
Вернуться к навигации
clone — клонирует удалённый репозиторий в локальную директорию.
Синтаксис
Синтаксис команды имеет вид:
git clone [--depth <число>] [-b <ветка>] <url> [<директория>]
Опции
Основные опции команды:
-
--depth <число>— создаёт клон только с указанным числом последних коммитов; -
-b <ветка>,--branch <ветка>— клонирует указанную ветку вместо ветки по умолчанию; -
--recurse-submodules— клонирует основной репозиторий вместе со всеми подмодулями; -
--bare— создаёт репозиторий без рабочей директории; -
--single-branch— клонирует только одну ветку без истории других веток; -
-o <имя>— задаёт имя удалённого репозитория (по умолчаниюorigin); -
-q,--quiet— подавляет вывод информации.
Пример работы
Для клонирования репозитория с ограничением истории до одного коммита выполните команду:
git clone --depth 1 https://<домен>/<владелец>/<название_проекта>.git
Команда add
Вернуться к навигации
add — перемещает изменения из рабочей директории в индекс для последующего коммита.
Синтаксис
Синтаксис команды имеет вид:
git add [<опции>] <спецификация_файлов>
Опции
Основные опции команды:
-
-A,--all— добавляет все отслеживаемые и неотслеживаемые файлы во всём репозитории; -
-u,--update— добавляет изменения и удаления только отслеживаемых файлов; -
-p,--patch— интерактивный выбор фрагментов изменений для добавления; -
-f,--force— принудительное добавление файлов, игнорируемых правилами .gitignore; -
-n,--dry-run— имитация добавления без реального выполнения.
Пример работы
Для добавления всех изменений выполните команду:
git add .
Символ . (точка) обозначает текущую директорию и все вложенные в неё поддиректории.
Для добавления одного файла в область подготовленных изменений перед выполнением коммита выполните команду:
git add README.md
Для добавления нескольких файлов списком выполните команду:
git add README.md main.py utils.py
Команда commit
Вернуться к навигации
commit — фиксирует изменения, добавленные в индекс, создавая новый коммит.
Синтаксис
Синтаксис команды имеет вид:
git commit [-m "<комментарий>"] [-a] [--amend]
Без опции -m после нажатия Enter откроется текстовый редактор, где нужно ввести сообщение коммита, сохранить файл и закрыть редактор.
Опции
Основные опции команды:
-
-m,--message="<комментарий>"— комментарий коммита; -
-a,--all— автоматически добавляет все отслеживаемые файлы перед коммитом; -
--amend— изменяет последний коммит (добавляет файлы или меняет комментарий); -
--no-edit— исправляет последний коммит, оставляя его комментарий без изменений; -
-s,--signoff— добавляет подпись в конец сообщения коммита.
Пример работы
Для сохранения подготовленных изменений в истории репозитория с комментарием выполните команду:
git commit -m "Добавлен файл README.md"
Команда branch
Вернуться к навигации
branch — управление ветками: создание, удаление, переименование и просмотр.
Синтаксис
Синтаксис команды имеет вид:
git branch [--list] [<шаблон>] git branch <имя_ветки> git branch -d <имя_ветки> git branch -m <старое> <новое>
Опции
Основные опции команды:
-
-d,--delete— удаляет ветку только если она слита; -
-D— принудительно удаляет ветку, даже если не слита; -
-m,--move— переименовывает ветку (<старое>— старое название ветки,<новое>— новое название ветки); -
-a,--all— показывает все ветки, включая удалённые; -
-r,--remotes— показывает только удалённые ветки; -
-v,--verbose— показывает последний коммит для каждой ветки.
Пример работы
Для просмотра списка всех локальных веток в репозитории с отображением последнего коммита для каждой из них выполните команду:
git branch -v
Команда checkout
Вернуться к навигации
checkout — переключение между ветками и восстановление файлов (является устаревшей командой).
Начиная с Git 2.23, появились две новые команды:
git switch— для переключения веток;git restore— для отмены изменений.
git checkout используется для сложных сценариев, но на практике рекомендуется использовать switch и restore.
Синтаксис
Синтаксис команды имеет вид:
git checkout <ветка> git checkout -b <новая_ветка>
Опции
Основные опции команды:
-b,--branch— создаёт новую ветку и переключается на неё;-B— создаёт ветку (сбрасывая существующую) и переключается;--force,-f— принудительное переключение (отбрасывает локальные изменения);-- <файл>— отменяет изменения в указанном файле (восстанавливает из последнего коммита).
Пример работы
Для создания новой ветки и переключения на неё выполните команду:
git checkout -b feature/new-button
Для переключения на существующую ветку main выполните команду:
git checkout main
Для отмены несохранённых изменений в файле index.html и восстановления его версии из последнего коммита выполните команду:
git restore index.html
Команда switch
Вернуться к навигации
switch — переключение между ветками (современная альтернатива checkout).
Синтаксис
Синтаксис команды switch имеет вид:
git switch [<опции>] [--no-guess] <ветка> git switch [<опции>] --detach [<точка_старта>] git switch [<опции>] (-c | -C) <новая_ветка> [<точка_старта>] git switch [<опции>] --orphan <новая_ветка>
Опции
Основные опции команды:
-C <новая_ветка>,--force-create— создать ветку и переключиться;--orphan <новая_ветка>— создать новую ветку без истории, все отслеживаемые файлы удаляются;-f,--force,--discard-changes— принудительное переключение с отбрасыванием локальных изменений;-m,--merge— переключение с трёхсторонним слиянием локальных изменений;--conflict=<стиль>— задать стиль отображения конфликтов;-t,--track[=(direct|inherit)]— установить привязку к удалённой ветке для новой ветки;--no-track— отключить привязку к удалённой ветке для новой ветки;-q,--quiet— подавить вывод сообщений;--progress,--no-progress— показывать/не показывать прогресс;--recurse-submodules,--no-recurse-submodules— обновлять/не обновлять содержимое активных подмодулей;--ignore-other-worktrees— разрешить переключение на ветку, уже используемую в другом рабочем дереве;--guess,--no-guess— при отсутствии локальной ветки автоматически создать её из одноимённой удалённой ветки.
Пример работы
Для создания новой ветки и переключения на неё выполните команду:
git switch -c feature/new-button
Для переключения на существующую ветку main выполните команду:
git switch main
Команда merge
Вернуться к навигации
merge — объединяет изменения из одной или нескольких веток с текущей веткой.
Синтаксис
Синтаксис команды имеет вид:
git merge <ветка>
Опции
Основные опции команды:
-
--no-ff— создаёт коммит слияния; -
--squash— объединяет изменения в индексе без создания коммита слияния; -
--abort— отменяет слияние в случае конфликта.
Пример работы
Для объединения ветки feature/new-button с текущей веткой main выполните команду:
git switch main git merge feature/new-button
Команда remote
Вернуться к навигации
remote — управление удалёнными репозиториями.
Синтаксис
Синтаксис команды имеет вид:
git remote add <имя> <url> git remote -v git remote remove <имя>
Опции
Основные опции команды:
-
add <имя> <url>— добавляет новый удалённый репозиторий с указанным именем и адресом; -
-v,--verbose— показывает список удалённых репозиториев с их URL-адресами; -
remove <имя>— удаляет указанный удалённый репозиторий.
Пример работы
Добавление удалённого репозитория:
git remote add origin https://<домен>/<владелец>/<название_проекта>.git
Просмотр списка удалённых репозиториев:
git remote -v
Удаление записи об удаленном репозитории:
git remote remove origin
Команда push
Вернуться к навигации
push — отправляет изменения из локального репозитория в удалённый.
Синтаксис
Синтаксис команды имеет вид:
git push [<имя_сервера>] [<ветка>]
Опции
Основные опции команды:
-
-u,--set-upstream— устанавливает связь между локальной и удалённой веткой; -
--force,-f— принудительная отправка, перезаписывает историю удалённой ветки; -
--all— отправляет все локальные ветки; -
--delete— удаляет ветку в удалённом репозитории.
Пример работы
Отправка изменений из текущей ветки в удалённый репозиторий:
git push origin main
Отправка изменений с установкой связи между локальной и удалённой веткой:
git push -u origin feature/new-button
Команда pull
Вернуться к навигации
pull — получает изменения из удалённого репозитория и объединяет их с текущей веткой.
Синтаксис
Синтаксис команды имеет вид:
git pull [<опции>] [<имя_удалённого_репозитория>] [<ветка>]
Опции
Основные опции команды:
-
--rebase— выполняетrebaseвместоmergeдля интеграции изменений; -
--no-rebase— явно используетmergeвместоrebase; -
-f,--force— принудительное получение изменений.
Пример работы
Получение изменений из удалённого репозитория
git pull origin main
Команда log
Вернуться к навигации
log — просмотр истории коммитов.
Синтаксис
Синтаксис команды имеет вид:
git log [--oneline] [--graph] [--author=<автор>] [--since=<дата>]
Опции
Основные опции команды:
-
--oneline— сокращённый вывод (каждый коммит в одну строку); -
--graph— показывает историю в виде графа ветвлений; -
--author="<имя>"— фильтрует коммиты по автору; -
--since="<дата>"— показывает коммиты после указанной даты; -
-n,--max-count=<число>— ограничивает количество выводимых коммитов; -
-p,--patch— показывает изменения для каждого коммита.
Пример работы
Просмотр истории коммитов в виде графа:
git log --oneline --graph
Поиск всех коммитов, сделанных пользователем Иван за последние два дня:
git log --author="Иван" --since="2 days ago"
Команда status
Вернуться к навигации
status — отображает состояние рабочей директории и индекса.
Синтаксис
Синтаксис команды имеет вид:
git status [--short] [-s]
Опции
Основные опции команды:
-
-s,--short— сокращённый вывод; -
-b,--branch— показывает информацию о текущей ветке даже в коротком формате; -
--ignored— показывает также игнорируемые файлы.
Пример работы
Просмотр состояния рабочей директории:
git status
Команда diff
Вернуться к навигации
diff — показывает различия между коммитами, ветками, индексом и рабочей директорией.
Синтаксис
Синтаксис команды имеет вид:
git diff [--staged]
Опции
Основные опции команды:
-
--staged,--cached— показывает различия между индексом и последним коммитом (что будет в следующем коммите); -
--color-words— показывает изменения по словам с цветовой подсветкой; -
--stat— показывает только статистику изменений (сколько строк добавлено/удалено).
Пример работы
Просмотр неиндексированных изменений:
git diff
Эта команда показывает различия между рабочей директорией и индексом.
Просмотр индексированных изменений:
git diff --staged
Показывает различия между индексом и последним коммитом.
Статистика изменений:
git diff --stat
Показывает статистику, какие файлы изменены, сколько строк добавлено и удалено.
Команда reset
Вернуться к навигации
reset — отменяет изменения, перемещая HEAD и (опционально) индекс и рабочую директорию.
Синтаксис
Синтаксис команды имеет вид:
git reset [--soft | --mixed | --hard] [<коммит>]
Опции
Основные опции команды:
-
--soft— отменяет коммит, оставляя изменения в индексе и рабочей директории; -
--mixed— отменяет коммит и очищает индекс, сохраняя изменения в рабочей директории (используется по умолчанию); -
--hard— полностью отменяет коммит, удаляя все изменения (сбрасывает индекс и рабочую директорию до состояния этого коммита).
Пример работы
Отмена последнего коммита с сохранением изменений:
git reset --soft HEAD~1
Полное удаление трёх последних коммитов:
git reset --hard HEAD~3
Команда stash
Вернуться к навигации
stash — позволяет сохранить незавершённые изменения, скрыть их и очистить рабочую директорию для переключения на другую ветку.
Синтаксис
Синтаксис команды имеет вид:
git stash [<опции>]
Опции
Основные опции команды:
push -m "<сообщение>"— сохраняет изменения в стек с указанным комментарием;push -u,--include-untracked— сохраняет также неотслеживаемые файлы;push -a,--all— сохраняет все файлы, включая игнорируемые;push -p,--patch— интерактивный выбор фрагментов изменений для сохранения;push -k,--keep-index— оставляет изменения в индексе после сохранения;list— показывает все сохранения в стеке;show— отображает изменения в указанном сохранении;pop— применяет последнее сохранение и удаляет его из стека;apply— применяет последнее сохранение, оставляя его в стеке;drop— удаляет указанное сохранение из стека;branch <ветка>— создаёт новую ветку из указанного сохранения;clear— удаляет все сохранения из стека.
Пример работы
Сохранение изменений в стек с комментарием:
git stash push -m "Исправлена ошибка"
Просмотр всех сохранений в стеке:
git stash list
Применение последнего сохранения и удаление его из стека:
git stash pop
Команда config
Вернуться к навигации
config — просмотр и изменение настроек git.
Синтаксис
Синтаксис команды имеет вид:
git config [--global] <ключ> [<значение>] git config --list
Опции
Основные опции команды:
list— выводит все текущие настройки;get <ключ>— получает значение указанной настройки;set <ключ> <значение>— устанавливает значение настройки;unset <ключ>— удаляет указанную настройку;edit— открывает конфигурационный файл в редакторе;rename-section <старое> <новое>— переименовывает секцию конфигурации;remove-section <секция>— удаляет указанную секцию конфигурации.
Пример работы
Настройка имени пользователя:
git config --global user.name "Иван Петров"
Настройка электронной почты:
git config --global user.email "ivan@example.com"
Просмотр всех текущих настроек:
git config --list
.gitignore — игнорирование файлов
Для исключения файлов из отслеживания git используется файл .gitignore, который размещается в корне репозитория.
Если файл или путь указан в .gitignore, команда git add . (а также git add -A) не добавит их в индекс.
Пример содержимого .gitignore:
# Игнорировать временные файлы *.tmp *.log # Игнорировать системные файлы .DS_Store Thumbs.db # Игнорировать директории с зависимостями pycache/ *.pyc node_modules/ # Игнорировать файлы с секретами .env secrets.json
Пример работы
Ниже приведён типовой сценарий работы с Git.
1. Клонирование репозитория.
Клонируйте репозиторий на компьютер:
git clone https://<домен>/<владелец>/<название_проекта>.git
Перейдите в каталог проекта:
cd <название_проекта>
2. Работа с ветками.
Проверьте текущее состояние:
git status
Пример вывода:
Текущая ветка: master Эта ветка соответствует «origin/master». нечего коммитить, нет изменений в рабочем каталоге
Создайте новую ветку для своей задачи (не работайте в main/master):
git switch -c feature/new-button
Проверьте, что переключились в новую ветку:
git branch
Пример вывода:
* feature/new-button
master
3. Добавление изменений.
Для редактирования файлов используйте Visual Studio Code или другой редактор кода.
После редактирования файлов добавьте все изменения в текущем каталоге:
git add .
4. Фиксация изменений и просмотр истории.
Зафиксируйте изменения с комментарием:
git commit -m "Добавил красную кнопку на главную"
Для просмотра истории коммитов можно выполнить команду:
git log --oneline
5. Отправка изменений в удалённый репозиторий.
Отправьте изменения на сервер:
git push origin feature/new-button
Если ветки ещё нет на удалённом сервере (флаг -u запомнит связь для следующих push/pull):
git push -u origin feature/new-button
6. Получение изменений из удалённого репозитория.
Получите последние изменения из основной ветки (master) без слияния:
git fetch origin
Для слияния с основной веткой выполните команду:
git merge origin/master
Для получения и слияния изменений можно выполнить команду (fetch + merge = pull):
git pull origin master
7. Исправление ошибки.
Обновите основную ветку:
git switch master
Скачайте последнюю версию с сервера:
git pull origin master
Создайте ветку для исправления:
git switch -c bugfix/login-error
Внесите правки в файлы, затем добавьте изменённый файл:
git add auth.py
Зафиксируйте изменения с комментарием:
git commit -m "Исправил ошибку логина при пустом пароле"
Отправьте ветку в удалённый репозиторий:
git push -u origin bugfix/login-error
8. Удаление ветки после принятия запроса на слияние.
Чтобы забрать изменения после того, как запрос на слияние приняли, переключитесь на master:
git switch master
Скачайте последнюю версию с сервера:
git pull origin master
Удалите локальную ветку:
git branch -d bugfix/login-error
При необходимости удалите ветку в удалённом репозитории:
git push origin --delete bugfix/login-error
Дата последнего изменения: 15.06.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.