git 日志未显示克隆存储库中的最新提交

git log not showing latest commits in cloned repository

不久前,我的一位团队成员使用

克隆了我的代码
git clone --bare -l /home/jaimemontoya/public_html/app/public.git /home/johndoe/app/public.git

他继续编码,当他使用 git remote -v 时,他得到了这个:

origin    ssh://johndoe@www.example.com/home/johndoe/app.git (fetch)
origin    ssh://johndoe@www.example.com/home/johndoe/app.git (push)

他有最新的代码,所以有一次我想通过以下方法获取他的代码的最新版本:

git clone --progress -v "ssh://jaimemontoya@example.com/home/johndoe/app.git" "C:\Users\jaimemontoya\Apps\Marketing\app"

令我惊讶的是,当我导航到 C:\Users\jaimemontoya\Apps\Marketing\app 并使用 git log -1 时,我得到了一个非常旧的提交,而不是我的团队成员在使用 git log -1 来自他的本地。他声称已经推送到远程,这意味着 ssh://johndoe@www.example.com/home/johndoe/app.git 应该已经有了他的最新代码,这样当我从它克隆时,我也应该能够获取最新的。我的第一个猜测是他可能没有推到远程。但假设他已经完成了,有什么可以解释为什么我无法从 ssh://johndoe@www.example.com/home/johndoe/app.git?

检索最新代码

注意:我用 root 尝试探索 ssh://johndoe@www.example.com/home/johndoe/app.git 看看我得到了什么:

root@sub.example.com [~]# cd ../home/johndoe/app.git/
root@sub.example.com [app.git]# ls -al
total 68
..................
..................
drwxr-x--x 5 johndoe gitgrp 4096 Nov  25  2021 app
..................
..................
drwxr-x--x 7 johndoe gitgroup 4096 Nov  25  2021 .git
..................
..................
root@sub.example.com [androidapp.git]# git log -1

我仍然看到旧提交,而不是我的团队成员声称已经推送到远程的最新提交。即使以 root 身份登录到托管代码的服务器后,也会发生这种情况。这是一个裸仓库。但是,当在托管远程存储库的服务器上使用 /home/johndoe/app.git/ 中的 git log -1 时,.git 不应该列出推送到 ssh://johndoe@www.example.com/home/johndoe/app.git 的最新代码吗?谢谢。

git log 默认显示 HEAD 的历史记录。所以 git log -1 只是向您展示 HEAD ref 指向的提交。很可能您的团队成员的最新代码被推送到 HEAD 指向的分支以外的分支,或者由于某种原因,远程仓库中的 HEAD 未更新为指向他们推送的最新提交。

您可以在远程或您的远程克隆上使用以下命令验证这一点:

git log --graph --pretty=format:'%C(yellow)%h%Creset %Cgreen(%cd) %C(bold blue)<%an>%Creset %C(red)%d%Creset %s' --all

如果我的猜想是正确的,你会在历史图表中看到 HEAD 指向一个非常旧的提交(在历史图表的更下方),你会看到你的团队成员在不同的地方的较新提交分支。您会在该分支的最后一次提交旁边找到该分支的名称(如果您使用我上面的命令,则为红色)。

这是怎么发生的?有很多种可能,比如:

  • 你的队友为他们的提交创建了一个新分支。
  • 当你的队友克隆它时,你的仓库没有指向 main/master 分支。当你克隆一个 repo 时,不仅所有的分支都会被克隆,HEAD 的当前值也会被克隆。然后您的队友可能会在进行更改之前切换到 main/master 分支。