GIT问题记录

一、Gitee相关

复现步骤:

自己在gitee上使用WEB解决冲突,本地未拉取最新的origin分支,然后本地也做了其他的修改,然后commit并且push,push时候报错,本地分支不干净

尝试拉取origin的最新内容,报错:

error: cannot lock ref 'refs/remotes/origin/UpdateXXXX': is at 706046d1d596c84f39ff3—— but expected 6bc88f583cf894441db44d46—— ! 6bc88f583..4589174aa UpdateXXXX -> origin/UpdateFBPP (unable to update local ref)

尝试方案:

git fetch origin

依旧报错:

git did not exit cleanly (exit code 1) (8906 ms @ 2024/2/26 14:48:32)

尝试清理引用失败。

git fetch --prune origin

尝试删除lock文件,没有找到.lock文件,尝试失败

成功方案:

git gc

执行git垃圾回收

二、更新子模块无法与远程保持一致

解决冲突时错误推送子模块,之后更新子模块无法和远程保持一致。

复现步骤:

在有冲突的时候拉取远程代码,并解决冲突,冲突可能发生在子模块上,或者没有。然后commit,然后更新子模块:

git submodule update --progress --init

查看本地子模块状态:

git submodule status

然后比较远程子模块的哈希值,发现并不对应,并且此时更新子模块无效。

尝试方案:

此时不限于拉取远程最新代码,fetch,pull远程代码。更新子模块全部维持不一致。

成功方案:

方案一:拉取代码解决冲突后,应该执行更新子模块,然后再commit解决冲突的commit记录。

方案二:

先找到远程父仓库的子模块哈希值,然后把本地子模块更新到子模块远程最新的哈希值,然后

将本地子模块的哈希值重置为远程主仓库记录的哈希值。

具体操作为:

git ls-tree HEAD path/to/submodule

git submodule update --remote --merge

git add path/to/submodule
git commit -m "重置子模块哈希值"

原因分析:

其实在使用git更新子模块时,我们使用

git submodule update --progress --init

,这个命令只会初始化子模块并更新到与父仓库一致的状态,而不会是寻找主仓库最新的涉及到依赖库的commit记录,根据记录中关于依赖的更新记录来决定的,如果本地落后于远程,就会使用远程的,和远程保持一致,如果本地“领先”于远程,即使这种领先是错误解决冲突导致,也会覆盖。所以在解决冲突后经常会“失效”。

注意这里的父仓库,如果指定过tracked_branch,会使用这个作为superproject,如果没有,会使用本地的作为superproject

三、使用git ls-tree无法查看远程子模块的信息

在对本地使用这个命令的时候有效

git ls-tree HEAD QYCAM/cam-dependency/

复现步骤:

直接调用显示无效

git ls-tree upstream/develop_311 cam-dependency/

尝试方案:

路径写成path/to也不行

成功方案:

即使是远程使用的路径也是相对路径,相对的是执行命令是当前工作路径的相对位置,因为本地和远程是一致的,所以可以使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值