git - 我们怎么理解git checkout [点]

标签 git 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 工作?

最佳答案

如您所见,checkout命令重载意味着两个不同的东西。我想git help checkout不过,这很清楚:

git-checkout - Switch branches or restore working tree files

命令有多种形式,您要问的是:

git checkout [<tree-ish>] [--] <pathspec>...

在你的例子中是 <tree-ish>参数被省略,--分隔选项和文件名的参数被省略,<pathspec>. (即当前目录)。该命令形式记录为:

Overwrite paths in the working tree by replacing with the contents in the index or in the <tree-ish> (most often a commit).

因为您没有指定 <tree-ish>参数,. 中文件的内容被索引中的内容替换。这意味着放弃 . 中的任何更改尚未添加到索引中。

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

关于git - 我们怎么理解git checkout [点],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52401478/

相关文章:

git - 创建本地分支并将其 rebase 为 master

git - 保护 Git 存储库

git - 为什么我不能 checkout 另一个 git 分支?

Git:为什么删除后还能切换到分支?

git - 从不受信任的来源打开或克隆 Git 存储库是否危险

linux - Git 只提交几个文件

git - 防止其他人强制推送到我的 Git 存储库

git - 克隆旧版本的 github repo

git - 在 Git 中以只读目的 check out 早期标记的最简洁方法

git - Git checkout 双破折号的含义