Git Checkout文件
签出文件类似于将
git reset
与文件路径一起使用, 除了它更新工作目录 *而不是 舞台。与此命令的提交级版本不同,这样做 不要移动HEAD参考,这意味着你不会切换 分支。
又向下一点:
如果 stage **并提交签出文件,则会“恢复”到该文件的旧版本。
然而,当我git checkout <sha1> -- <file>
时,我看到更改添加到我的工作树(即,sublime更新中的文件)和 git status
显示对文件的修改是绿色和分阶段/指数。 (由git diff
验证,给出空输出。)
*他们的重点
**我的重点
答案 0 :(得分:1)
Atlassian文件在这里完全错误。
git checkout tree-ish -- path
首先将指定的 path
复制到索引(也称为临时区域),然后从索引复制到工作树。这个覆盖以前索引中的任何内容。这里的 tree-ish
是Git文档意味着告诉你任何会找到提交或提交树对象的东西就足够了。大多数人在这里使用提交哈希ID,分支名称和相对名称,例如HEAD~3
,但the gitrevisions documentation中的任何内容都足够了。
(要检查提交,checkout
代码需要提交哈希,在这种情况下只需要提交ID。但是,对于这种特殊情况,它只需要找到源树快照与提交ID相关联.Git可以像提交签出一样使用提交来查找树,但是您可以直接提供树哈希ID本身。几乎从来没有理由一个人来做这件事,但有些软件可能会这样做。另见the git rev-parse
documentation。)
但请注意,git checkout -- path
从索引复制到工作树(没有先从 tree-ish
中提取到索引)。这可能导致他们做出错误的假设。
使用git show
或git cat-file -p
, 是一种直接从提交到工作树提取文件的方法,无需先通过索引。在旧版本的Git中,此过程始终会跳过任何行尾和其他过滤器和文本转换项,git checkout
通常会为您执行此操作;在较新的Gits中,您可以按照git checkout
的方式强制执行这些转换。只有在使用涂抹过滤器,ident
过滤器或CRLF行结束转换选项时,此警告才有意义。