linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Основы Git/working-tree

kb/basics ── Основы Git ── beginner

Working tree

Файлы и директории твоего проекта на диске - те, которые ты открываешь в редакторе. Одна из трёх зон Git наряду с индексом ([[add]]) и репозиторием ([[commit]]).

view as markdownaka: work-tree, workdir

Working tree (рабочее дерево, также «рабочая копия») - это просто файлы проекта в том виде, в котором ты их видишь и редактируешь. Git к ним не привязан напрямую: он лежит рядом в .git/ и наблюдает.

Что значит «отслеживается»

Любой файл в рабочем дереве находится в одном из четырёх состояний с точки зрения Git:

  1. Untracked - файл существует на диске, но Git о нём ничего не знает. Никогда не попадал ни в индекс, ни в коммит.
  2. Tracked, unmodified - файл есть в репозитории (в последнем коммите), на диске идентичен этому коммиту.
  3. Tracked, modified - файл есть в репозитории, но на диске отличается от того, что в HEAD.
  4. Tracked, staged - изменения файла попали в индекс через git add, готовы к коммиту.

Файл может быть одновременно staged и modified: ты застейджил одну правку, потом сделал ещё одну. Тогда git status покажет файл в обоих разделах одновременно.

Чистая working tree

«Чистое» рабочее дерево означает: нет ни modified, ни staged, ни untracked файлов. git status пишет:

nothing to commit, working tree clean

Это важное состояние. Многие команды (например, git pull или git switch) могут отказаться работать, если рабочее дерево «грязное» и операция привела бы к перезаписи изменений.

Чтобы быстро довести working tree до чистого состояния:

  • закоммитить правки (git add + git commit),
  • отложить их (git stash),
  • выбросить их (git restore <file> или git reset --hard).

.gitignore и рабочее дерево

Файлы из .gitignore физически лежат в рабочем дереве, но Git их не показывает как untracked и не предлагает добавить. Удобно для билд-артефактов, локальных конфигов, IDE-метаданных.

Проверить, почему конкретный файл игнорируется:

bash
git check-ignore -v <file>
# .gitignore:5:node_modules/    node_modules/main.js

Подводные камни

  • Working tree - это не одно и то же, что checkout. Чекаут - это операция (заменить состояние working tree содержимым другого коммита). Working tree - само состояние.
  • В bare-репозиториях (git init --bare) working tree нет вообще
  • есть только содержимое .git/. Используется для серверной стороны git push/fetch.
  • При переключении ветки Git переписывает рабочее дерево содержимым целевого коммита. Несохранённые правки могут помешать - git stash перед переключением спасает.

§ команды

bash
git status

Показывает состояние всех трёх зон, включая working tree

bash
git diff

Разница между working tree и индексом (что не застейджено)

bash
git restore <file>

Откатить файл в working tree до состояния индекса

bash
git clean -fd

Удалить untracked файлы и пустые директории (осторожно!)

§ см. также

  • addgit addКоманда переносит изменения файлов из рабочего дерева в индекс (staging area). Сама ничего не коммитит - только готовит, что попадёт в следующий коммит.
  • commitCommitОбъект Git: снимок состояния всего проекта (через tree) плюс метаданные - автор, коммиттер, дата, родители, сообщение. SHA коммита включает SHA родителя, что делает историю криптографически связанной.
  • statusgit statusПоказывает разницу между тремя зонами Git: что изменено в рабочем дереве, что застейджено в индексе, какая ветка активна. Самая безвредная команда - ничего не меняет, можно жать сколько хочешь.
  • vcsСистема контроля версийИнструмент, который хранит историю изменений файлов, позволяет возвращаться к прошлым версиям и совместно работать над проектом нескольким людям. Три поколения: локальные, централизованные, распределённые.
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.