Должен ли git checkout обходить индекс и только обновлять рабочее дерево? - PullRequest
0 голосов
/ 15 мая 2018

Из документов Atlassian :

Git Checkout File

Проверка файла аналогична использованию git reset с путем к файлу, кроме негообновляет рабочий каталог * вместо рабочей области.В отличие от версии этой команды на уровне фиксации, она не перемещает ссылку на HEAD, что означает, что вы не будете переключать ветви.

И чуть дальше:

Если вы stage ** и зафиксировали извлеченный файл, это приведет к «возврату» к старой версии этого файла.

Однако, когда я git checkout <sha1> -- <file> Я вижу изменения, добавленные к моему рабочему дереву (т. Е. К файлу в возвышенных обновлениях) и git status показывает, что изменение файла - зеленое и в staged / in-index.(Подтверждено git diff пустым выводом.)

Неправильно ли настроен мой git, неверны ли их документы или я их неправильно понял?

* их акцент

** мой акцент

1 Ответ

0 голосов
/ 15 мая 2018

Документ Атлассиана здесь совершенно неверен.

git checkout <em>tree-ish</em> -- <em>path</em> копирует указанное path сначала в ваш индекс (он же промежуточная область), затем из вашего индекса в ваше рабочее дерево. Это перезаписывает все, что было в индексе раньше. tree-ish - вот как Git-документация означает, что достаточно всего, что найдет коммит или объект дерева коммитов. В основном люди используют идентификаторы хеша коммитов, имена веток и относительные имена, например HEAD~3, но что-либо из документации gitrevisions достаточно.

(Чтобы проверить фиксацию, коду checkout нужен хеш коммита, в этом случае подойдет только идентификатор фиксации. Однако для этого конкретного случая ему нужно только найти связанный снимок исходного дерева , связанный с ним с идентификатором коммита. Git может использовать коммит, чтобы найти дерево так же, как он делает для извлечения коммита, но вы можете напрямую указать хеш-идентификатор дерева. У человека почти никогда нет причин делать это, но может потребоваться некоторое программное обеспечение. См. также документацию git rev-parse .)

Обратите внимание, однако, что git checkout -- <em>path</em> копирует из вашего индекса в ваше рабочее дерево (без предварительного извлечения из tree-ish в индекс). Это может привести к неверному предположению, что они сделали.

Там - это способ извлечения файла непосредственно из коммита в ваше рабочее дерево, без предварительного просмотра индекса, используя git show или git cat-file -p. В старых версиях Git этот процесс всегда пропускает любые элементы конца строки и другие элементы фильтра и преобразования текста, что git checkout делает для вас обычно; в более новых Gits вы можете заставить эти преобразования происходить так же, как и с git checkout. Это предупреждение имеет значение только в том случае, если вы используете нечеткие фильтры , ident или CRLF и опции преобразования конца строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...