首页 > 解决方案 > 我们如何理解 git checkout [点]

问题描述

据我了解,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?

标签: gitgit-checkout

解决方案


正如您所注意到的,该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>参数,因此文件的内容.将替换为索引中的内容。这意味着丢弃.尚未添加到索引中的任何更改。

您可以将其视为“从存储库中签出这些文件”,这可能意味着来自提交,也可能来自索引(可能包含已暂存但尚未提交的更改)。


推荐阅读