今天 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. NumPy之:数据类型对象dtype

    目录 简介 dtype的定义 可转换为dtype的对象 dtype对象 None 数组标量类型 通用类型 内置Python类型 带有.dtype属性的对象 一个字符的string对象 数组类型的Str ...

  2. Linux运维比较常用的一些脚本

    目录 一.根据PID过滤进程所有信息 二.根据进程名过滤进程信息 三.根据用户名查询该用户的相关信息 四.加固系统的一些配置 五:实现磁盘分区的 六.使用一整块硬盘创建逻辑卷 七.将一块硬盘分区,然后 ...

  3. Python脚本自动化破解大白鲨摄像头(Shodan)

    关于本文的技术知识点,Shodan模块的用法,传送门-->  Python中shadon模块的使用    Shodan的使用 今天我们要利用python进行自动化破解的摄像头叫大白鲨摄像头,他的 ...

  4. Eureka讲解与应用

    Eureka[juˈriːkə] 简介 Eureka是Netflix服务发现的服务端与客户端,Eureka提供服务注册以及服务发现的能力,当是Eureka Server时(注册中心),所有的客户端会向 ...

  5. phpstorm中加上符号($,括号等)后搜索不到

    Ctrl+F右边选中这个Regex后带上符号就搜索不到,不要勾选这个就可以带符搜索了

  6. 【转】docker打包python应用

    转自https://www.cnblogs.com/shenh/p/9518343.html 一.前言 容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全 ...

  7. C++ primer plus读书笔记——第7章 函数——C++的编程模块

    第7章 函数--C++的编程模块 1. 函数的返回类型不能是数组,但可以是其他任何一种类型,甚至可以是结构和对象.有趣的是,C++函数不能直接返回数组,但可以将数组作为结构或对象的组成部分来返回. 2 ...

  8. C++ string的size()和length()函数没有区别

    C++标准库中的string中两者的源代码如下:      size_type   __CLR_OR_THIS_CALL   length()   const     { //   return   ...

  9. KMP板子(其实还没完全懂...)

    KMP模板 1.next数组的实际含义 next数组从-1开始,主串a,子串b,next[j]=k,满足b[0,k-1]==b[j-k,j-1],k同时也为b子串前缀的下标,j为b子串后缀的下标 ge ...

  10. 实施CRM系统后 企业客户服务的改变

    通过实施CRM客户管理系统,企业的竞争力和盈利能力得到大幅提高.在这个过程中,客户服务不仅能够持续的满足客户的需求,还能够促进客户与企业建立长期的互惠互利的良好客户关系,这也为企业赢得了更多的商机和利 ...