我的git存储库今天进入了一个奇怪的状态。 $daysInYear = 365;
if ($d->format('L') === 1) { // Returns 1 if leap year.
$daysInYear = 366;
}
$daysLeft = $daysInYear - $dayOfYear;
报告的文件已修改,但git status
未显示任何更改。在互联网上搜索之后,我检查了文件属性(读/写/执行和所有者GID / UID)和内容(如果是行结尾问题)。属性已正确设置,git diff
和md5sum theFile
报告了相同的哈希值。
然后我尝试使用存储在git:git show HEAD:theFile | md5sum
中的文件覆盖工作树文件。令人惊讶的是,git show HEAD:theFile > theFile
继续报告此文件的更改。
然后,我检查了文件:git status
,之后,git checkout -- theFile
改变了意见并报告git status
没有变更。
我无法理解theFile
和show HEAD:theFile > theFile
之间的区别。也许git将信息保存在缓存中,由checkout -- theFile
而不是checkout
更新?
答案 0 :(得分:1)
git checkout <tree-ish> -- <pathspec>
当给出
<paths>
时,git checkout不会切换分支 它从索引文件或命名的<tree-ish>
(通常是提交)更新工作树中的命名路径。这意味着
git checkout -- path
将使用已经上演的内容覆盖工作树(git add&#39; ed)。
git checkout -- theFile
使索引和工作树相同,这意味着git diff
为空。
show HEAD:theFile > theFile
不会修改索引,因此git diff仍会报告索引与工作树之间的差异。