拒绝 git push -f ,纯小白也能学会的git远程仓库冲突解决方案

关于远程仓库你必须知道的:

什么是远程仓库

Git 远程仓库,简单来说,就是位于远程服务器上的代码仓库,它就像是一个 "云端基地" ,专门用来存储和管理我们的代码。我们可以把本地仓库中的代码推送到远程仓库,也可以从远程仓库拉取最新的代码到本地,实现代码的共享和协作。

从存储位置上看,本地仓库在我们自己的电脑里,就像我们的私人小抽屉,我们可以随时打开它进行操作,并且不需要联网也能工作。而远程仓库在远程服务器上,就像一个公共的大仓库,需要通过网络才能访问 ,这也是为什么我们前面几章的命令不需要联网也可以运行。

为何需要远程仓库?

既然远程仓库是一个"云端基地",那么我们可以很自然的想到他的一些作用:

  1. 协作沟通桥梁:在多人协同开发项目时,不同开发者可在各自的本地仓库中独立开展开发工作,完成阶段性任务后将代码推送到远程仓库,其他团队成员则从远程仓库拉取最新代码,实现代码的实时共享与同步。
  2. 备份安全保障:在软件开发进程中,本地电脑可能遭遇诸如硬盘损坏、系统崩溃等各类故障。而远程仓库相当于一个云端的备份,即便本地数据不幸丢失,凭借远程仓库,开发者也能轻松将代码恢复至其他设备,确保项目开发不受重大影响。
  3. 开源展示舞台:借助远程仓库,尤其是像 GitHub 这样的知名开源平台,开发者能够积极参与开源项目,将自己的代码作品展示给全球开发者社区。

拥有自己的远程仓库

讲了那么多,我们至今也没有一个自己的远程仓库,现在就让我们动手创建一个远程仓库。

本地与远程仓库初次建立连接的方法

与远程仓库建立连接的方法主要有两种:

方法 1:本地已有项目,关联远程仓库

  1. 将原有项目给转化成git仓库

    csharp 复制代码
    git init

    这个命令将会在该文件夹下生成一个 .git 目录,这是git的工作目录,也是我们判断一个一个目录是不是git仓库的一个标志。

  2. 添加远程仓库地址

    csharp 复制代码
    git remote add origin 远程仓库的地址

    git 命令,将远程仓库的地址添加到本地,并将其命名为origin。这里的origin是远程仓库的常用别名,方便后续在推送和拉取代码时进行引用。

  3. 首次推送代码

    css 复制代码
    git push -u origin main

    执行该命令会将本地main分支的代码推送到远程仓库,并自动设置本地分支与远程分支的关联关系。在此之后,进行推送和拉取代码操作时,可省略分支名,直接使用 git push 命令即可,简化操作流程。

方法 2:直接克隆远程仓库

若希望直接将远程仓库的代码完整复制到本地,可执行下面这个命令

bash 复制代码
git clone 远程仓库地址

Git 会在本地创建一个与远程仓库完全一致的副本,包括所有分支及完整的提交历史记录,方便开发者在本地快速开展开发工作。我们也可以看到该目录下回自动生成一个 .git 仓库。

本地分支与远程分支的交互操作

本地仓库与远程仓库的交互主要有两种:拉取推送,通过这两个操作我们可以实现本地仓库与远程仓库的同步。

推送代码到远程:git push

  1. 在本地完成代码修改后,首先需执行 git add. 命令,将所有修改的文件添加到暂存区,准备提交。
  2. 使用 git commit -m "" 命令,提交修改并附上详细且有意义的提交说明,以便后续追溯和理解代码变更。
  3. 执行 git push 命令(此命令等同于git push origin main),将本地main分支的代码推送到远程仓库,实现本地代码与远程仓库的同步更新。
csharp 复制代码
git add.
git commit -m "some comment"
git push

拉取远程更新:git pull

当团队成员更新了远程仓库的代码,你需要同步最新版本时,可执行 git pull 命令(等同于git pull origin main)。

git pull 相当于 git fetch + git merge

git pull 命令的内在原理是先执行 git fetch 命令,从远程仓库下载最新的代码更新,然后执行 git merge 命令,将下载的更新合并到本地当前分支。通过这一系列操作,确保本地代码与远程仓库的最新状态保持一致。

实践:模拟多人协作:冲突的产生与解决

步骤1:准备工作:

首先准备两个本地分支 devadevb 来分别模拟两个开发者的本地分支。

步骤 2:制造冲突

  1. 开发者 A 的操作 :开发者 A 对 diary-2025.md 文件进行修改,内容如下:

# hello deva

修改完成后,执行 git add. && git commit -m "A更新日记" 命令提交修改,并使用 git push origin HEAD:master 命令将代码推送到远程仓库,完成自己的代码更新操作。

这里介绍一下 git push origin HEAD:master 命令, origin 是远程仓库的名字,HEAD指向的是当前的本地分支,也就是 devamaster 指的是想要推的远程分支的名字

  1. 开发者 B 的操作 :开发者 B 在未执行 git pull 命令获取最新代码的情况下,直接对 diary-2025.md 文件的同一行进行修改,内容为:# hello devb

当开发者 B 执行 git push 命令尝试推送代码时,将会收到报错提示,告知远程仓库存在本地未合并的修改,无法直接推送。

步骤 2:解决冲突

  1. 拉取远程代码:开发者 B 在得知冲突后,执行git pull命令,此时系统会明确提示冲突(CONFLICT),表明本地代码与远程代码存在不一致,需要进行冲突解决。
  1. 手动解决冲突 :开发者 B 打开冲突文件 diary-2024.md ,文件中冲突部分会以如下格式显示:

开发者 B 需根据实际业务需求,手动仔细选择保留的内容。例如,经过思考后将其修改为:

# 今天和团队一起学习了远程仓库操作!

  1. 重新提交并推送:完成冲突解决并修改文件后,执行git add.命令将修改后的文件添加到暂存区,接着使用git commit -m "解决冲突:合并A和B的修改"命令提交解决冲突的操作记录,最后执行git push命令,将最终整合后的代码推送到远程仓库,完成整个冲突解决流程。
相关推荐
码客前端4 分钟前
理解 Flex 布局中的 flex:1 与 min-width: 0 问题
前端·css·css3
Komorebi゛5 分钟前
【CSS】圆锥渐变流光效果边框样式实现
前端·css
工藤学编程17 分钟前
零基础学AI大模型之CoT思维链和ReAct推理行动
前端·人工智能·react.js
徐同保18 分钟前
上传文件,在前端用 pdf.js 提取 上传的pdf文件中的图片
前端·javascript·pdf
怕浪猫19 分钟前
React从入门到出门第四章 组件通讯与全局状态管理
前端·javascript·react.js
欧阳天风26 分钟前
用setTimeout代替setInterval
开发语言·前端·javascript
EndingCoder30 分钟前
箭头函数和 this 绑定
linux·前端·javascript·typescript
郑州光合科技余经理30 分钟前
架构解析:同城本地生活服务o2o平台海外版
大数据·开发语言·前端·人工智能·架构·php·生活
沐墨染32 分钟前
大型数据分析组件前端实践:多维度检索与实时交互设计
前端·elementui·数据挖掘·数据分析·vue·交互
郑州光合科技余经理35 分钟前
开发实战:海外版同城o2o生活服务平台核心模块设计
开发语言·git·python·架构·uni-app·生活·智慧城市