承诺水管和承诺瓷器不匹配

问题描述 投票:0回答:2

为什么在我使用命令完成提交后,管道文件仍然在暂存区域中。 下面是我所做的事情的图片,按时间顺序排列。我唯一注意到的是 .git/refs/heads/master 中没有任何内容,即未指定分支的 HEAD,因此我的 log 命令有问题。我知道 HEAD 仅需要控制上一次提交到下一次提交,它是指向分支主节点的指针,因此我们有一些链表,但我不明白为什么 Git 程序看不到舞台已承诺。一些解释是,对于 git status,他实际上使用与 git log 类似的代码来查看提交的所有内容,因此由于没有 HEAD 而无法找到它,他说还没有提交。 设置管道命令后的状态 [工作](https://i.sst[日志

将文件添加到树后提交树

](https://i.sstatic.net/z0kVZ25n.png)atic.net/v7AcUo7C.png)

git git-plumbing
2个回答
3
投票

位于 master 分支上; master 分支上没有 提交(它是“未出生的”,这意味着它是一个附加到没有提交的名称)。 使用管道命令在主分支上创建

is

的根提交的方法是使用此模式 $ tree=$(git write-tree) $ commit=$(echo 'Initial commit' | git commit-tree $tree) $ git update-ref HEAD $commit

那个
update-ref

步骤是你遗漏的。在你这样做之前,主分支指针仍然只是坐在那里,不指向任何东西(正如我所说的“未出生”)。

然后,您将为每个后续提交执行此操作,除非这些提交也有父级。即使他们这样做,您仍然

需要更新分支指针。

git commit

命令当然可以在幕后为您完成所有这些操作。但您正在探索管道命令,因此您不想使用它。 :)


感谢有人提供解决方案,但我找到了我的解决方案。我给出的假设是正确的 假设:为了进行控制,git 必须(没有强调)对于哪个起点,所有节点(提交对象)都是平等的、同龄的并且无法决定先访问谁,或者一次也没有。我在默认为: git checkout ".git/refs/parentCommitName" 后解决了问题。也就是说,我在文件父提交名称(HEAD)中设置了自己的提交父级。

-2
投票

固定了

© www.soinside.com 2019 - 2024. All rights reserved.