解决 Git 远程推送报错的终极指南

本文最后更新于:6 个月前

前言

  • Git是开发人员日常工作中不可或缺的版本控制工具

git 大厂代码提交原则(适用新手,细节拉满) - 掘金 (juejin.cn)

  • 然而,在推送代码到远程仓库时,我们经常会遇到各种报错和问题。
  • 在这篇终极指南中,我将为你详细介绍常见的Git远程推送错误,并提供解决方案,帮助你顺利推送代码。

🔍 探索常见错误:解析Git远程推送中的问题

通过深入研究Git远程推送过程中的常见错误,我将为你揭示它们的原因,并给出解决方案。无论是推送冲突、权限问题还是网络连接错误,本指南将一一为你解决。

✅ 解决方案:提供针对每个错误的有效解决方案

我将为每个常见错误提供一系列有效的解决方案,帮助你克服障碍。这些解决方案经过测试和验证,可以保证你的代码顺利推送到远程仓库。

💻 保障推送顺利进行:确保你的代码能够成功推送

通过遵循指南中的解决方案,你将能够解决常见的Git推送错误,并确保你的代码能够顺利推送到远程仓库。这将大大提高你的工作效率和团队协作的顺畅度。

🥇 掌握Git远程推送技巧:加强对Git操作的掌握

通过解决Git远程推送错误的终极指南,你将更深入地了解Git操作,并掌握解决各类问题的技巧。这不仅对个人的开发工作有帮助,也对团队的合作和代码质量有积极影响。

让我们一起解决Git远程推送报错,保障顺利推送代码,提升我们的开发效率和代码管理能力!

正文

基础知识

什么是版本控制

  • 版本控制最主要的功能就是追踪文件的变更。(2023/07/15晚)
  • 它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。
  • 每一次文件的改变,文件的版本号都将增加。
  • 除了记录版本变更外,版本控制的另一个重要功能是并行开发。
  • 软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。
  • 并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。

Git是干什么的

远程推送报错

  • 我们在本地向远程仓库推送代码时,总会不可避免地出现报错
  • 我们必须要明确的一点是:远程推送代码,其实是创建一个本地分支,再将本地分支的代码,推送到指定的远程仓库分支的过程
1
2
大白话讲,就是允许本地代码比远程代码多一部分,
即远程仓库有的代码,本地仓库必须有;远程仓库没有的,本地仓库也可以有
  • 了解了这个,理解远程推送报错原因就比较轻松了(2023/07/15晚)
  • 引起远程推送错误的原因有很多,接下来我们会一一罗列出引起报错的各种情况,再逐个给出解决方法

远程仓库未同步

原因

  • 情景:
  • 如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库中拉取文件的时候会报错
1
(fatal:refusing to merge unrelated histories)

解决方法

  • 如此拉取:
1
git pull origin master --allow-unrelated-histories

本地仓库未同步

原因

  • 情景:我们希望将本地已经写好的代码,推送到远程仓库托管
  • 那我们就需要在新建仓库,而新增的仓库,我们一般都勾选添加 README.md文件
  • 这时,我们在本地当然是这样操作了:(2023/07/15晚)
1
git init
1
git remote add origin 【远程仓库地址】
1
git add .
1
git commit -m ""
1
git push origin master
  • 但这时,会报错:
1
! [rejected] master -> master (fetch first) error: fail to push some refs
  • 导致问题出现的原因是因为:远程代码里存在README.md文件
  • 什么意思呢?我们在前面提到过,仅允许本地代码比远程代码多一部分,而现在,远程代码存在README.md文件,但本地没有
  • 此时,我们把远程仓库的README.md文件理解为多余文件,这种远程推送报错原因归类为本地仓库未同步
  • 我们的解决方法是:在远程推送之前,先将远程仓库的多余文件拉取至本地,同步两个仓库

解决方法

  • 在执行 push 之前,执行以下代码即可:
  • 在 push 之前执行下面的代码:(2023/07/15午)
1
git pull --rebase origin master

image-20230723160919462

踩坑记录

  • 这两天在推送 Memory API 项目代码到 Gitee 仓库的过程中,遇到了很多问题(2023/07/23晚)
  • 花了整整两天时间,才成功地推送代码成功,下面我将介绍推送代码时的常见报错和解决办法
  • 将文件的修改加入暂存区:
1
git add .
  • 这一步操作,是将该本地分支内的所有文件都添加至暂存区
  • 将暂存区的文件提交修改到版本库:
1
git commit -m "提交信息"
  • 注意这里的提交信息不能为空,否则该提交操作会被驳回:

image-20230728143850131

  • 推送代码之前,应该拉取远程分支的代码到本地,同步过后再提交:
1
git pull origin master
1
git pull origin master
  • 这时,推送代码可能会报这种错误:
1
! [rejected] master -> master (fetch first) error: fail to push some refs
  • 说明本地分支的代码与远程分支代码部分文件有冲突,需要将有冲突的文件,一一合并,如此拉取:
1
git pull --rebase origin master
  • 发生冲突意味着 Git 无法自动决定如何合并代码,这需要我们手动合并文件,解决冲突
  • 如果你不知道要合并哪些文件,可以执行以下命令,提交合并结果:(2023/07/23晚)
1
git rebase --continue
  • 这时,如果还有未合并的冲突文件,就执行以下命令,手动合并:
1
git add 冲突文件名
  • 完成这步操作,就可以推送代码了(2023/08/25晚)

image-20230825210401291

  • 在推送API接口开放平台的代码时,注意到:执行查看需要手动合并的文件后,无需依次合并提交:
1
git rebase --continue
  • 如果确保无误,没有别的要求的话,只需一次性全部提交合并冲突即可:
1
git add .
  • 效果如下:(2023/08/25晚)

image-20230825211923074

注意

  • 在执行这段代码时:
1
git pull --rebase origin master
  • 网上有的教程可能会跟你讲,执行以下代码来退出 rebase 过程:
1
git stash / git reset --hard HEAD
  • 千万不要这样做,这样会放弃提交本地的所有改动,回退到最近的一次提交状态,本地分支也会被远程分支覆盖
  • 正确的做法就是上面提到的,正常合并冲突文件,最后提交
  • 或者如果不想提交本次修改,可以选择退出合并冲突文件,执行以下代码:(2023/07/23晚)
1
git rebase --abort

Eslint 优化导致git代码推送失败

  • 思来想去,决定在这个栏目的目录下也记录下这次报错吧
  • 这是我在今晚推送 Memory API接口开放平台时遇到的报错。详情看下图: (2023/10/18晚)

image-20231018214512698

  • 如上图所示,使用 git 推送代码竟然报错了,这是什么原因呢?
  • 我们简单罗列出以上的报错信息:

这些错误和警告是由静态代码分析工具 ESLint 提供的。根据报错信息,您遇到了一些问题:

  1. File ignored because of a matching ignore pattern. Use "--no-ignore" to override:这是一个警告,意味着某些文件被忽略了,因为它们匹配了 .eslintignore 文件中设定的忽略模式。您可以使用 --no-ignore 参数来覆盖这个忽略,让这些文件被检查。
  2. 'loading' is assigned a value but never used @typescript-eslint/no-unused-vars:这是一个错误,提示您在 InterfaceInfo/index.tsx 文件中定义了 loading 变量,但是从未使用过。您可以删除没被使用的变量,或者使用变量来解决您需要的逻辑。
  3. Missing "key" prop for element in array react/jsx-key:这是两个错误,它们指出在您的组件 InterfaceInforenderDataSource 方法中,两个元素没有提供 key 属性。React 要求在渲染组件数组时,每个元素都要提供一个唯一的 key 属性,以便在更新列表时进行准确的 diff 操作。您需要为这两个元素添加一个适当的 key 属性。
  • 所以,这样的报错信息是由静态代码分析工具 ESLint 导致的(2023/10/18晚)

    • 我们使用该工具暴露出编码过程中的代码不规范的问题
    • 但是,在推送代码时,这个工具却仍在校验代码的完整性和规范性,
  • 在这些代码报错不影响项目运行的前提下,影响了正常的代码提交流程
  • 解决方法很简单,只需要在 git commit 命令后添加 –no-version ,绕过 ESLint 工具的代码校验功能即可(如下):

1
git commit -m "接口调用页面优化 接口参数信息 接口文档预开发" --no-verify

image-20231018221051988

  • 这里其实还有很多有关 ESLint 的配置管理,我就暂时不深究了,日后有机会再展开聊聊

总结


解决 Git 远程推送报错的终极指南
http://example.com/2023/07/15/解决 Git 远程推送报错的终极指南/
作者
Memory
发布于
2023年7月15日
更新于
2023年11月13日
许可协议