今天 pull 代码的时候碰到以下问题(隐去了一些公司敏感信息):

XXX@CN-00012645 MINGW64 /c/Gerrard/Workspace/XXX (master)
$ git pull
error: cannot lock ref 'refs/remotes/origin/feature/hy78861': is at d4244546c8cc3827491cc82878a23c708fd0401d but expected a6a00bf2e92620d0e06790122bab5aeee01079bf
From ssh://XXX
! a6a00bf2e92..f34729ba17a feature/hy78861 -> origin/feature/hy78861 (unable to update local ref)

这里首先是你的 feature/hy78861 这个分支出现了问题,由于你现在在 master 分支,如果只需要拉下来 master 的代码,那可以用以下命令作为替代(第一个解决方案):

XXX@CN-00012645 MINGW64 /c/Gerrard/Workspace/XXX (master)
$ git pull origin master
From ssh://XXX
* branch master -> FETCH_HEAD
......
Current branch master is up to date.
  • 由于 git pull 会把所有 remote 的信息全部拉下来,包括那个出错的分支 feature/hy78861,所以只 pull 你需要的分支信息就可以了。
  • 这是一个治标的办法,这样一来你每一次 pull 都需要带上分支信息,没办法一键同步所有的远程分支信息。

要治本需要了解问题的根本原因,看上面的 log 信息,应该是分支索引 id 的信息紊乱。

所以我们先搜一下 a6a00bf2e92620d0e06790122bab5aeee01079bf 的信息:

XXX@CN-00012645 MINGW64 /c/Gerrard/Workspace/XXX (master)
$ grep -ri 'a6a00bf2e92620d0e06790122bab5aeee01079bf'
.git/info/refs:a6a00bf2e92620d0e06790122bab5aeee01079bf refs/remotes/origin/feature/hy78861
.git/logs/refs/remotes/origin/feature/HY78861:214f906ff67841712d6082f1a471cae91385cf2c a6a00bf2e92620d0e06790122bab5aeee01079bf XXX 1616051165 +0800 pull: fast-forward
.git/logs/refs/remotes/origin/feature/HY78861:a6a00bf2e92620d0e06790122bab5aeee01079bf d4244546c8cc3827491cc82878a23c708fd0401d XXX 1623054120 +0800 pull: forced-update
.git/packed-refs:a6a00bf2e92620d0e06790122bab5aeee01079bf refs/remotes/origin/feature/hy78861

然后搜一下 d4244546c8cc3827491cc82878a23c708fd0401d 的信息:

XXX@CN-00012645 MINGW64 /c/Gerrard/Workspace/XXX (master)
$ grep -ri 'd4244546c8cc3827491cc82878a23c708fd0401d'
.git/logs/refs/remotes/origin/feature/HY78861:efaa737003ebf53deb81ba78cf62d395a6a03a0b d4244546c8cc3827491cc82878a23c708fd0401d XXX 1614914234 +0800 pull: fast-forward
.git/logs/refs/remotes/origin/feature/HY78861:d4244546c8cc3827491cc82878a23c708fd0401d f9650914c7a0fd3987a0dc106824d99c435297e3 XXX 1615431235 +0800 pull: storing head
.git/logs/refs/remotes/origin/feature/HY78861:c62e20a4c3a8a3860a915a8559cbf167da18a16f d4244546c8cc3827491cc82878a23c708fd0401d XXX 1616051205 +0800 pull: fast-forward
.git/logs/refs/remotes/origin/feature/HY78861:c62e20a4c3a8a3860a915a8559cbf167da18a16f d4244546c8cc3827491cc82878a23c708fd0401d XXX 1623053561 +0800 fetch: fast-forward
.git/logs/refs/remotes/origin/feature/HY78861:a6a00bf2e92620d0e06790122bab5aeee01079bf d4244546c8cc3827491cc82878a23c708fd0401d XXX 1623054120 +0800 pull: forced-update
.git/refs/remotes/origin/feature/HY78861:d4244546c8cc3827491cc82878a23c708fd0401d

最后再去 Gerrit 仓库,看一下这个 repo 的分支信息(我把一些信息抹掉了):

问题显然出在 feature/HY78861 和 feature/hy78861 上面,推测根本原因是:

  • 这两个 feature branch 都是在外国的同事创建的,他们的工作环境是 Linux 系统,而中国的工作环境是 Linux 系统,再加上他们可能做了些不知道什么的骚操作,由于系统差异导致问题。

我们重新观察错误信息:

cannot lock ref 'refs/remotes/origin/feature/hy78861': is at d4244546c8cc3827491cc82878a23c708fd0401d

看一下我们的本地文件 C:\Gerrard\Workspace\XXX\.git\refs\remotes\origin\feature\HY78861(注意这里是大写),文件内容是 :

  • d4244546c8cc3827491cc82878a23c708fd0401d

显然这就是错误里面定位的内容,那么是不是把这个文件里面的内容改成 expected 就行了呢?

很可惜,失败了:

XXX@CN-00012645 MINGW64 /c/Gerrard/Workspace/EXXX (master)
$ git pull
From ssh://XXX
+ a6a00bf2e92...d4244546c8c feature/HY78861 -> origin/feature/HY78861 (forced update)
error: cannot lock ref 'refs/remotes/origin/feature/hy78861': is at d4244546c8cc3827491cc82878a23c708fd0401d but expected a6a00bf2e92620d0e06790122bab5aeee01079bf
! a6a00bf2e92..f34729ba17a feature/hy78861 -> origin/feature/hy78861 (unable to update local ref)

这里文件中的信息,被强制从 a6a00bf2e92620d0e06790122bab5aeee01079bf 复原成了 d4244546c8cc3827491cc82878a23c708fd0401d。

这里我们总结一下问题:

  • HY78861 分支 remote 上的 id 是 d4244546c8cc3827491cc82878a23c708fd0401d
  • hy78861 分支 remote 上的 id 是 f34729ba17a48c9628dff31f8c6720843c6d1a74
  • id a6a00bf2e92620d0e06790122bab5aeee01079bf 来源未知,可能就是由于外国同事的某些骚操作引起的,可能是一个过期的 id 值,后来被上面的某一个覆盖了
  • C:\Gerrard\Workspace\XXX\.git\refs\remotes\origin\feature 这个文件目录下面,由于 Windows 系统的关系,只能存在 HY78861 或者 hy78861 两个文件之一

所以我们这里就有方案了:

  1. 根据上面的记录,保证 HY78861 和 hy78861 的分支映射关系正确,一共两处:packed-refs 和 info/refs。
  2. C:\Gerrard\Workspace\XXX\.git\refs\remotes\origin\feature 这个目录下面,保留一个 hy78864 或者 HY78864 文件,里面的内容随意,因为在执行 git pull 命令时会被覆盖。
  3. 如果是 HY78864,内容会变成 d4244546c8cc3827491cc82878a23c708fd0401d;如果是 hy78861,内容会变成 f34729ba17a48c9628dff31f8c6720843c6d1a74。

最后,git pull 执行成功

XXX@CN-00012645 MINGW64 /c/Gerrard/Workspace/XXX (master)
$ git pull
From ssh://XXX
+ f34729ba17a...d4244546c8c feature/HY78861 -> origin/feature/HY78861 (forced update)
Already up to date.
Current branch master is up to date.

项目记事【Git】:git pull 出错 error: cannot lock ref 'refs/remotes/origin/feature/hy78861': is at d4244546c8cc3827491cc82878a23c708fd0401d but expected a6a00bf2e92620d0e06790122bab5aeee01079bf的更多相关文章

  1. error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken...

    之前在自己的项目中添加了一个分支,然后做了一些操作,比如同步本地的分支情况到远程仓库中,然后在远程仓库中完成分支合并,以及 Pull request 等等操作,后来,在本地仓库中进行 git fetc ...

  2. Git Pull Failed: cannot lock ref 'refs/remotes/origin/xxxxxxxx': unable to resolve ref

    1.xxxxxxxx代表目录名称,我要pull的目录是supman_creditmall_v5: 2.从代码库中pull代码时报这个错误,代码pull失败: 3.解决办法,看下图,删除文件后再pull ...

  3. Git Push:error: Couldn't set refs/remotes/origin/master;error: update_ref failed for ref 'refs/remot

    作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=543 今天使用Git Push代码时产生错误: Rename from 'XXXX/.git/refs/remotes/ ...

  4. 【Mac】安装 Homebrew 出错 Failed during: git fetch origin master:refs/remotes/origin/master --tags --force

    今天在 Mac 装 Homebrew 遇到了一个问题,在网上找了大量解决方案,做个总结. Mac 版本 High Sierra 10.13.6. 问题描述 在 Mac 终端输入了 Homebrew 官 ...

  5. git pull报错,error: cannot lock ref导致拉流失败

    使用git命令删除相应refs文件,git update-ref -d refs/remotes/XXX,或者手动删除文件 简单粗暴强行git pull,执行git pull -p 原文:https: ...

  6. cygwin运行git submodule init出错error while loading shared libraries的解决

    installing the Devel\gettext package should solve your problem. git-submodule requires that. Unfortu ...

  7. homebrew update 出现Failure while executing: git pull --quiet origin refs/heads/master:refs/remotes/origin/master解决方案

    具体可以参考https://github.com/Homebrew/homebrew/issues/21002 cd /usr/local git status git reset --hard or ...

  8. homebrew安装问题(Failed during: git fetch origin master:refs/remotes/origin/master --tags --force)

    在mac系统中,使用homebrew可以很方便的管理包.按照官网的说明执行以下命令时总是报错: /usr/bin/ruby -e "$(curl -fsSL https://raw.gith ...

  9. git cannot lock ref

    参考博客:https://blog.csdn.net/lindexi_gd/article/details/79213042 错误原文: cannot lock ref ‘refs/remotes/o ...

随机推荐

  1. MySQL数据库干货分享!unsigned使用案例分析

    今天主要写一下unsigned的使用,进入正文前先分享一套博主觉得讲的很详细很实用的MySQL教程给大家 https://www.bilibili.com/video/BV1fx411X7BD 好了, ...

  2. B - Tempter of the Bone(DFS+剪枝)

    The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked it u ...

  3. shackdow-socks 搭建

    搭建步骤 wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadow-1-socks_install/m ...

  4. 关于js中的回调函数callback,通俗易懂

    前言 其实我一直很困惑关于js 中的callback,困惑的原因是,学习中这块看的资料少,但是平时又经常见,偶尔复制一下前人代码,功能实现了也就不再去追其原由,这么着,这个callback的概念就越来 ...

  5. Android进程的so注入--Poison(稳定注入版)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/53869796 Android进程的so注入已经是老技术了,网上能用的Android ...

  6. hdu2155 小黑的镇魂曲(dp)

    题意:                             小黑的镇魂曲 Problem Description 这个事情发生在某一天,当小黑和SSJ正在约会的时候,邪恶的Guner抓走了SSJ, ...

  7. CVE-2014-3153分析和利用

    本文是结合参考资料对CVE-2014-3153的分析,当然各位看官可以看最后的资料,他们写的比我好. 在看CVE-2014-3153之前我们用参考资料4中例子来熟悉下这类漏洞是如何产生的: /** * ...

  8. UVA11992不错的线段树段更新

    题意:       给你一个矩阵,最大20*50000的,然后有三个操作 1 x1 y1 x2 y2 v  把子矩阵的值全部都加上v 2 x1 y1 x2 y2 v  把子矩阵的值全部都变成v 2 x ...

  9. Day007 递归

    递归 定义 ​ A方法调A方法!就是自己调自己 作用 ​ 利用递归可以用简单的程序来解决一些复杂的问题.它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程 ...

  10. java+selenium使用JS、键盘滑动滚动条

    本篇文章介绍如何使用JS和键盘对象对页面进行滑动滚动条-------------主要针对java做自动化测试的同学 一:使用键盘对象操作滚动条 //导包 import org.openqa.selen ...