在checkout 命令的 git 文档中,可以找到以下文本:
...如果没有给出路径, git checkout 也会更新 HEAD 将指定的分支设置为当前分支...。
谁能更简单地解释一下这意味着什么?对不起,如果它看起来很简单,并且通过该页面阅读,我似乎无法想出它的确切含义。对不起,如果这看起来很基本..
特别是我对结帐如何更新 HEAD 感到困惑。我通常设想 checkout 会影响工作目录——这是 git 独有的功能,因为您正在更新存储库的本地副本以便以后使用它?
在checkout 命令的 git 文档中,可以找到以下文本:
...如果没有给出路径, git checkout 也会更新 HEAD 将指定的分支设置为当前分支...。
谁能更简单地解释一下这意味着什么?对不起,如果它看起来很简单,并且通过该页面阅读,我似乎无法想出它的确切含义。对不起,如果这看起来很基本..
特别是我对结帐如何更新 HEAD 感到困惑。我通常设想 checkout 会影响工作目录——这是 git 独有的功能,因为您正在更新存储库的本地副本以便以后使用它?
HEAD
是指向您的工作副本从中签出的提交的指针。因此,如果您签出一个分支(或提交或标签),则HEAD
设置为该提交。
此信息存储在 textfile.git/HEAD
中,您可以简单地查看其内容:
$ cat .git/HEAD
# refs: refs/heads/master
这意味着git checkout branchname
将
HEAD
到该分支的尖端,以便您现在“在”它。例子:
jb@apto % git branch
* develop
master
next
jb@apto % git checkout master
Switched to branch 'master'
jb@apto % git branch
develop
* master
next
版本 A:(仅指定分支)
git checkout <branch>
获取该 <branch> 的所有文件并将 HEAD(指向“我现在在哪里”的指针)放在指定的分支中。
版本 B:(仅指定路径)
git checkout <file>
获取最新版本的 <file> 并保留 HEAD。
如果您处于DETACHED HEAD模式(请参阅此问题),您可以轻松地将 HEAD 重置为 master 分支:
这里一个 ' git checkout
' 会将 HEAD 重置为master
分支的尖端。
(更多内容参见“ A Visual Git Reference ”)
它还将更新索引和工作目录。
所以它不仅仅是重置指针' HEAD
'。
使用 Git 2.23+(2019 年 8 月),使用git switch
而不是混淆git checkout
,加上git restore
(仅用于文件)
git switch master
这会将 HEAD 切换回master
.
您仍然可以使用git switch --detach <acommit>
.
不再结帐(处理分支和文件)。