git 中 HEAD 概念

参考资料


本文讲述的 是 git 命令中的 HEAD ,适用于 github ,不适用于 gerrit



本文不对git进行介绍,只是收集一些和 HEAD 相关的链接


  • 实例
$ git branch -a
  dev
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  • 解读
1/第一个HEAD
从上面的示例可以看到有第三行有 一个 *.这个是一个HEAD 标识
2/第二个HEAD
第四行有一个 HEAD ,这个HEAD 是 remotes/origin/HEAD

  -----------------
 
在文件中

1/第一个HEAD
$ cat .git/HEAD 
ref: refs/heads/dev
  
2/第二个HEAD
$ cat  .git/refs/remotes/origin/HEAD    
ref: refs/remotes/origin/master

HEAD的实质,请参见


else

  • 从上面可以看到 第一种HEAD 都是指向了分支,分支指向了分支上的最新提交
  • 其实HEAD除了可以指向分支,也可以指向提交
  • 具体请参见 2.5 检出之前的提交
git checkout <commit>

更新工作目录中的所有文件,使得和某个特定提交中的文件一致。
你可以将提交的哈希字串,或是标签作为 <commit> 参数。这会使你处在分离 HEAD 的状态。

当HEAD处于分离状态(不依附于任一分支)时,提交操作可以正常进行,但是不会更新任何已命名的分支。(你可以认为这是在更新一个匿名分支。)
$ git checkout 3e61d72da33650ecb5b6ac4b8395fde3c4fb950c       
Note: checking out '3e61d72da33650ecb5b6ac4b8395fde3c4fb950c'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 3e61d72... 10
    
$ git status 
HEAD detached at 3e61d72
nothing to commit, working directory clean
  
$ cat .git/HEAD 
3e61d72da33650ecb5b6ac4b8395fde3c4fb950c
  
$ git checkout master 
Previous HEAD position was 3e61d72... 10
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
  
$ git status 
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
  • 综上: head 指向提交,也可以指向分支.
  • 分支永远指向 分支上的最新提交
### 回答1: 在 Git HEAD 指向当前所在的版本。它类似于指针的概念,指向某个 commit 的位置。 你可以理解为,HEAD 是当前所在分支的最后一次提交的快照。当你在工作区进行修改并提交时,HEAD 会向后移动并指向新的提交。 通常情况下,HEAD 会被链接到当前所在分支上,这意味着它会跟随分支的最新提交而移动。但是,你也可以手动将 HEAD 指向其他的 commit,例如在创建新的分支时,HEAD 会指向当前所在分支的最后一次提交,然后新的分支就会从这个提交开始。 总之,HEADGit 非常重要的概念,它代表当前的工作环境,决定你在哪个版本上进行修改和提交。 ### 回答2: 在Githead是一个指向当前所在分支的指针,它指向最后一次提交的commit。可以将head看作是当前工作目录的快照,它记录了当前所处的分支和最新的提交。 head通常分为两种状态,分别是分离头指针和指向分支的头指针。 当head指向分支的头指针时,表示当前工作目录位于该分支上。任何新的提交将会在该分支上进行,并且head会随着新的提交而更新到最新的commit上。 当head指向某个具体的commit时,表示处于分离头指针状态。在这种情况下,对工作目录的修改不会在当前分支进行,而是会在解除分离头指针状态之后创建一个新的分支。这样做的目的是为了临时保存一些更改,但不想将其与任何现有分支进行关联。 使用head可以方便地在不同分支或commit之间进行切换,通过切换head指向的分支或commit,可以轻松地查看和编辑不同的代码状态,回滚到之前的版本,或者创建新的分支进行开发工作。 在实际使用,要注意合理使用head指针,避免频繁切换和解除分离头指针状态,以免引起代码混乱和冲突。同时,要定期进行commit操作,保持head与工作目录的同步。 ### 回答3: 在githead是一个指向当前分支的指针。它指向最新提交的快照,可以认为是当前工作目录的“快照”或“快照状态”。 head引用是git非常重要的一个概念git使用head引用来标记当前工作目录所在的分支,并根据head的位置来查找最新的提交。head可以是直接引用一个分支(比如“master”),也可以是间接引用。 一般情况下,head会指向一个分支(比如“master”),代表当前所在的分支。当我们在工作目录进行一次提交时,head会随着最新提交的改变而更新。同时,git也会自动将新的提交加入到head所指向的分支。 此外,head还可以指向其他标识符,比如commit的哈希值,这样就可以实现在不同分支间进行切换。例如,我们可以使用“git checkout”命令来切换到某个commit(即切换到不同的快照状态),这时head将指向该commit。 在git,我们可以使用特殊引用符号来引用head的位置。比如,“HEAD”表示head的位置,"HEAD^"表示head的父级commit。这些引用符号可以用来在提交历史进行导航和查找。 总而言之,headgit是一个非常重要的概念。它作为一个指针,指向当前工作目录的快照状态,代表着最新的提交。通过head,我们可以实现在不同分支或提交之间进行切换和导航。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值