【问题标题】:git log not showing latest commits in cloned repositorygit log 未显示克隆存储库中的最新提交
【发布时间】:2021-11-26 16:38:26
【问题描述】:

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

克隆了我的代码
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 登录到托管代码的服务器后,也会发生这种情况。这是一个裸仓库。但是,在托管远程存储库的服务器上使用 git log -1 from /home/johndoe/app.git/ 时,.git 不应该列出推送到 ssh://johndoe@www.example.com/home/johndoe/app.git 的最新代码吗?谢谢。

【问题讨论】:

  • git log -1 仅显示 HEAD 提交。如果 HEAD 不在您期望的位置,那并不意味着提交不存在。检查两台机器上的git log --all:您期望的提交是否以这种方式显示?
  • 他为什么跑git clone --bare?这意味着创建一个服务器端存储库,其他人将git push 进入该存储库。裸克隆没有工作树,因此没有工作的地方(这就是为什么它对服务器有好处:没有工作可以被推送搞砸,但为什么它对用户不利)。 (这与你的问题无关,只是分支名称和HEAD的混淆,但看起来很奇怪。)

标签: git git-clone git-log


【解决方案1】:

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 指向一个非常旧的提交(在历史图表的更下方),您将在不同的分支上看到您的团队成员的较新提交。您将在该分支的最后一次提交旁边找到该分支的名称(如果您使用我上面的命令,则为红色)。

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

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

【讨论】:

  • Teammate 推送到与在托管远程存储库的服务器上签出的分支不同的分支。您所说的一切都是正确的,并且使用您发送的git 命令揭示了发生了什么。非常感谢!
  • @JaimeMontoya np。很高兴这很容易。
猜你喜欢
  • 2013-11-06
  • 2015-01-12
  • 2018-06-19
  • 2014-08-30
  • 1970-01-01
  • 2015-06-29
  • 2013-07-14
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多