【发布时间】:2019-02-02 06:16:10
【问题描述】:
假设我创建(但不提交)一个文件file.txt,然后键入git checkout HEAD 或git checkout HEAD .。我认为git checkout 基本上用你提交的快照覆盖了你当前的工作文件,所以我认为这会删除file.txt。但事实并非如此。为什么?
【问题讨论】:
-
好吧,因为你的假设是错误的。
git checkout不会影响未跟踪的文件。 -
Git 只管理被跟踪的文件,它非常努力地避免让你丢失数据(这很关键)。
-
@SergioTulentsev 我认为这不是一个很好的表达方式。 “未跟踪”只是意味着“现在不在暂存区”。
git checkout仍然会修改与上次提交时不同的文件,即使您没有暂存这些更改。 -
@JackM 不,这不是 git 中“未跟踪”的意思。
-
Git 书籍并没有真正不同意:索引通常由 via
git checkout填充,所以索引中现在的内容是那些在快照中。但是,如果您更改索引(例如使用git rm --cached或git add),则会更改跟踪文件集。还要注意git checkout <tree-ish> <paths>与git checkout <branch>是一个非常不同的命令。一些人(包括我自己)认为它应该使用不同的拼写,即根本不以git checkout开头。
标签: git version-control git-checkout git-reset git-clean