拒绝 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命令,将最终整合后的代码推送到远程仓库,完成整个冲突解决流程。
相关推荐
db_lnn_202128 分钟前
【vue】全局组件及组件模块抽离
前端·javascript·vue.js
Qin_jiangshan38 分钟前
vue实现进度条带指针
前端·javascript·vue.js
菜鸟una44 分钟前
【layout组件 与 路由镶嵌】vue3 后台管理系统
前端·vue.js·elementui·typescript
小张快跑。1 小时前
【Vue3】使用vite创建Vue3工程、Vue3基本语法讲解
前端·前端框架·vue3·vite
Zhen (Evan) Wang1 小时前
.NET 8 API 实现websocket,并在前端angular实现调用
前端·websocket·.net
星空寻流年1 小时前
css3响应式布局
前端·css·css3
Rverdoser2 小时前
代理服务器运行速度慢是什么原因
开发语言·前端·php
航Hang*2 小时前
前端项目2-01:个人简介页面
前端·经验分享·html·css3·html5·webstorm
MaisieKim_2 小时前
python与nodejs哪个性能高
前端·python·node.js
yuanbenshidiaos2 小时前
讲讲git 和svn
git·svn