Как мы понимаем Git Checkout [точка] - PullRequest
0 голосов
/ 19 сентября 2018

Как я понимаю, git checkout - это перемещение head.

Например, git checkout <commit id> - это перемещение head в <commit id>, git checkout <branch_name> - перемещениеhead до <branch_name>.

Однако, git checkout . должен отбросить неустановленные изменения.не похоже, что что-то касается head.

. Поэтому я не могу понять, почему git использует одно и то же ключевое слово checkout для двух совершенно не относительных вещей.Или git checkout . все еще работает на основе head?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Как вы заметили, команда checkout перегружена, что означает две разные вещи.Я думаю, что git help checkout достаточно ясно это объясняет:

git-checkout - Switch branches or restore working tree files

Существует несколько форм команды, о которой вы спрашиваете:

git checkout [<tree-ish>] [--] <pathspec>...

В вашем случаеАргумент <tree-ish> опущен, аргумент -- для разделения опций и имен файлов опущен, а <pathspec> равен . (т. Е. Текущий каталог).Эта форма команды задокументирована как:

Перезаписать пути в рабочем дереве, заменив их содержимым индекса или <tree-ish> (чаще всего фиксацией).

Так как вы не указали аргумент <tree-ish>, содержимое файлов в . заменяется содержимым из индекса.Это означает, что нужно отменить любые изменения в ., которые еще не были добавлены в индекс.

Вы можете думать об этом как о «извлечении этих файлов из репозитория», что может означать либо принятие, либоиндекс (который может содержать изменения, которые были поставлены, но еще не зафиксированы).

0 голосов
/ 19 сентября 2018

вы можете использовать git checkout для изменения имени вашей ветки, а также для сброса файла (в удаленный) или в файл в конкретной ветке.

Работа будет зависеть от аргумента после извлечения.если это имя файла, он сбрасывает файл, как в Current Index.это также полезно для получения файла из других ветвей.

если это имя ветви, это изменит текущую рабочую ветку.

...