Ключевые концепции

Рабочее дерево

Рабочее дерево (англ. working tree), также известное как рабочая директория (англ. working directory) или рабочая копия (англ. working copy) — это файлы и папки проекта, которые можно редактировать, удалять и организовывать на компьютере. Именно здесь ты вносишь изменения в файлы, прежде чем закоммитить их в репозиторий.

Пример

Допустим, идёт работа над веб-приложением. Проект находится под контролем версий Git, и в файловом менеджере видно примерно следующее:

project-root/
  ├── .git/
  ├── src/
  │   ├── components/
  │   │   ├── header.js
  │   │   └── footer.js
  │   ├── utils/
  │   │   └── helpers.js
  │   └── main.js
  ├── index.html
  ├── styles.css
  ├── app.js
  └── config.json

Вопрос: почему это называется рабочим деревом (tree), если оно совсем не похоже на дерево?

Ответ: во‑первых, оно перевёрнуто. Во‑вторых, это метафора! Дерево описывает иерархическую структуру файлов и папок в проекте. Как у дерева есть ветви и листья, так и у проекта есть папки (ветви) и файлы (листья).

Папка .git содержит все метаданные и базу объектов для репозитория Git. Она скрыта от обычного просмотра, потому что с ней не предполагается взаимодействовать напрямую. Однако при работе в терминале эта папка часто видна в списках файлов.

Остальные файлы и папки (вроде src/, index.html, styles.css и т. д.) образуют рабочее дерево. Эти файлы можно редактировать, добавлять новые или удалять существующие. Это те файлы, за изменениями в которых следит Git.

Как это работает

Git отслеживает разницу между файлами в рабочем дереве и последним коммитом в текущей ветке. Это позволяет свободно менять, добавлять и удалять файлы в рабочем дереве, не влияя сразу на историю коммитов репозитория. Как только изменения готовы, их можно добавить в область подготовки (командой вроде git add) и затем создать новый коммит, сохранив снимок состояния в истории проекта.

При переключении на другую ветку или конкретный коммит файлы в рабочем дереве обновляются так, чтобы соответствовать состоянию репозитория на тот момент. Затем в эти файлы можно вносить изменения: добавлять новые функции, исправлять ошибки или улучшать код.

Рабочее дерево важно по нескольким причинам:

  • Оно даёт осязаемое, редактируемое представление проекта в его текущем состоянии или в любой активной ветке.
  • Оно позволяет работать над файлами проекта и тестировать изменения перед созданием нового коммита.
  • Оно позволяет сразу увидеть в файловой системе результат переключения веток или получения изменений из удалённого репозитория.

Связанные команды

Проверить состояние рабочего дерева:

git status

Посмотреть отличия рабочего дерева от последнего коммита:

git diff

Отменить локальные правки в файле внутри рабочего дерева:

git restore path/to/file.txt

Добавить все изменения в текущей папке (.) в область подготовки:

git add .