04. Git File Types

После создания репозитория git начинает отслеживать файлы находящиеся в текущем каталоге. Каждый файл в вашем рабочем каталоге может находиться в одном из двух состояний: отслеживаемый git (tracked) и неотслеживаемый git (untracked).

Когда вы впервые клонируете репозиторий, все файлы будут отслеживаемыми и неизменёнными.

Tracked files

Отслеживаемые файлы — это те файлы, (1) которые или были уже ранее добавлены в git или (2) git-у указано их отслеживать, т.к. они войдут в следующий коммит. Исходя из этого, все отслеживаемые файлы делятся на:

  • unmodified - не изменился c момента предыдущего коммита;

  • modified - изменился, но еще не добавлен в выборку для коммита;

  • staged - изменился или новый файл и был добавлен в выборку для коммита при помощи git add.

Все файлы, отобранные для следующего коммита, находятся в индексе или на сцене (staging area). Ранее индекс назывался кэшем, поскольку сцена кэширует файлы, которые войдут в следующий коммит.

Рабочей директорией (working directory) называется текущая версия файлов с которой вы работаете (current checkout).

Команда git status покажет все изменения в текущей рабочей директории. Предыдущий коммит хранит слепок прошлого состояния рабочей директории (history).

Untracked files

Неотслеживаемые файлы — это любые файлы в вашем рабочем каталоге, которые не входили в ваш последний слепок состояния и не подготовлены к коммиту.

  • Созданные файлы

  • Сгенерированные файлы

Git file operations

Рабочая модель гит имеет следующий вид:

  • Гит отслеживает все файлы в рабочей директории, а история коммитов представляет историю её изменений.

  • Рабочая директория содержит текущую версию файлов.

  • Сцена представляет собой выборку файлов которые войдут в следующий коммит.

Следующие команды предназначены для копирования файлов между рабочей директорией, сценой и историей, представленной в форме коммитов:

# from working directory to staging area
git add <files>
git commit -a

## from staging area to commit
git commit

## from staging area to working directory
git reset -- <files> # copy files from previous commit to stage
git reset # drop all files from staging area
git reset HEAD <files> # drop files from index to changed

git checkout -- file # to discard changes in working directory
git checkout <branch> -- <filename> # checkout single file from different branch

Вы можете использовать git reset -p, git checkout -p, и git add -p вместо имён файлов или вместе с ними, чтобы в интерактивном режиме выбирать, какие именно изменения будут скопированы.

Removing

For removing files from your tree, you can simply run: git rm <filename>. This will remove that file from the index (and thus from the next commit) as well as from your working directory.

Команда rm удаляет файл физически но не индексирует это изменение. Удаление файла нужно подтвердить git add ..

Удаление файла только из индекса (физически он остается в директории):

git rm --cached path/to/file

Move file

git mv from to

Last updated