gpt4 book ai didi

git - 分支实际上等于他们在 git 中的最后一次提交吗?

转载 作者:太空狗 更新时间:2023-10-29 14:28:50 26 4
gpt4 key购买 nike

我在 git 中读到过“分离的头”,当有人 check out “提交”而不是“分支”时就会发生这种情况。

对我来说好奇的部分(我无法通过手册页或谷歌验证)是一个分支是否确实在内部引用了它的最后一次提交? (否则,我认为 checkout 命令可能会禁止出现分离的头...,但事实并非如此。)

如果上面的猜测是正确的,我们可以说所有分支都是对它们尖端的提交的引用吗?

(基本上,当我读到来自两个人的这两条不同的评论时,这种怀疑在我心中产生了:

  1. HEAD 是对当前 checkout 的提交的 ref(引用)。
  2. checkout 到分支而不是提交!

所以我想也许第 2 个人建议使用分支进行 checkout ,因为它保证将 HEAD 移动到“提示提交”)。

最佳答案

是的,分支只是对提交的引用,一旦您在其 checkout 中进行新提交,该提交就会更新。您甚至可以手动创建分支。

(只是准备一个包含两次提交的 repo 协议(protocol))

$ git init
Initialized empty Git repository in /home/che/foo/.git/
$ touch bar
$ git add bar
$ git commit -minitial
[master (root-commit) 5d512c6] initial
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bar
$ touch second
$ git add second
$ git commit -msecond_commit
[master 5aebe72] second_commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 second
$ git log --format='%H %s'
5aebe72d3f6cd72c3236021319d8ea43eae899fe second_commit
5d512c6fcec86f02d69a7b4f5f177ec1a6ecb32e initial

(现在在.git/refs/heads中新建一个文件,这是git保存分支的地方之一)

$ echo 5d512c6fcec86f02d69a7b4f5f177ec1a6ecb32e > .git/refs/heads/old
$ git branch
* master
old

(或者你可以查看文件,有提交哈希,没有别的)

$ fgrep '' .git/refs/heads/*
.git/refs/heads/master:5aebe72d3f6cd72c3236021319d8ea43eae899fe
.git/refs/heads/old:5d512c6fcec86f02d69a7b4f5f177ec1a6ecb32e

还有其他类型的引用(远程分支和标签),它们也可以存储在压缩文件中,因此这些文件操作并不总是有效,但您可以使用 git show 检查和修改引用 - refgit update-ref

关于git - 分支实际上等于他们在 git 中的最后一次提交吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53797876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com