当前位置: 首页 > news >正文

Git【多人协作一】

目前,基本上可以完成的工作如下:

  • 基本完成Git的所有本地库的相关操作,git 基本操作,分支理解,版本回退,冲突解决等等
  • 申请码云账号,将远端信息clone到本地,以及推送和力量去。

但是,还有一个特别重要的事情,实现多人协作开发!!!为了做这件事情,我们需要先准备工作。


一、准备阶段:搭建多人协作环境

1.1 开发者一

  • 将项目clone到指定目录:

  • gitee上新建dev远程分支供我们使用 :

  • 创建成功

  • 创建成功的远程分支是可以通过Git 拉取到本地来 , 以完成本地开发工作 。

Git 里的git push/git pull本质是本地 ↔ 远程仓库的同步操作。

1. 如果本地分支和远程分支没有建立「追踪关系」,Git 就不知道:

  • 要把代码推到哪个远程仓库
  • 要推到哪个远程分支

所以第一次推送时,必须写全命令:git push origin master

2. 克隆仓库时会自动建立连接

当你用git clone拉取一个仓库时:

  • 本地会自动创建master(或main)分支
  • 这个本地分支会自动追踪远程仓库里同名的origin/master分支
  • 相当于 Git 已经记住了「本地 master ↔ 远程 origin/master」的对应关系

3. 建立连接后,push 可以简化写法

1.2 开发者二

在windows环境下,在clone同一个项目仓库 , 来模拟多人开发的开发者

  • 按住Shift键,同时在文件夹空白处右键单击。
  • 在弹出的菜单里,你会看到:
    • 在终端中打开(Windows 11 推荐,默认就是 PowerShell)
    • 或者Open PowerShell window here(Windows 10 经典选项)
  • 点击后,PowerShell 会直接打开,且当前路径就是D:\git

二、创建远程开发分支

在实际开发中,我们通常不会直接在主分支master上干活,因为master应该始终保持稳定。正确的做法是:基于master创建一个dev分支,所有开发都在dev上进行。

2.1 在Gitee上创建dev分支

在远程仓库页面,点击“分支” -> “新建分支”,分支名输入dev,基于master创建。【上面已经完成】

2.2 拉取远程dev分支到本地

开发者A和B都需要拉取这个新分支:

git pull

此时运行git branch -r,应该能看到origin/dev

也可以直接clone下来 , 我们上面已经克隆了下来

2.3 创建本地dev分支并关联

在本地创建dev分支,并与远程dev分支关联:

git checkout -b dev origin/dev

这条命令会:

  • 创建本地dev分支

  • 切换到dev分支

  • 设置本地dev分支跟踪远程origin/dev

三、模拟并行开发与冲突解决

假设你们要共同开发一个file.txt文件。开发者A先写了一个功能,并推送开发者B随后也修改同一个文件,推送时就会遇到冲突。这是团队协作中最常见的情况,我们来一步步模拟。

3.1 开发者A:添加第一个功能并推送

dev分支上,编辑file.txt

vim file.txt

内容如下:

hello git aaa

然后提交并推送:

git add file.txt git commit -m "first function" git push origin dev

推送成功。此时远程dev分支已经包含了第一次提交。

3.2 开发者B:在未拉取的情况下修改文件

开发者B没有执行git pull,直接修改本地的file.txt(内容可能基于旧的版本):

hello git bbbb

然后提交并尝试推送:

git add file.txt git commit -m "second function" git push origin dev

此时,Git会拒绝推送,并提示:

! [rejected] dev -> dev (fetch first)
error: failed to push some refs to 'git@gitee.com:hyb91/git_teaching.git'
hint: Updates were rejected because the remote contains work that you do
hint:not have locally. This is usually caused by another repository pushing
hint: to the same ref.You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.

意思是:远程分支有新的提交,而你没有拉取,所以推送被拒绝。

3.3 开发者B:拉取并解决冲突

按照提示,先拉取最新代码:

git pull origin dev

Git会自动尝试合并,但发现file.txt有冲突,提示:

Auto-merging file.txt
CONFLICT (content):Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.

此时打开file.txt你会看到Git用特殊标记标出了冲突

hello git
<<<<<<< HEAD
bbb
=======
aaa
>>>>>>> 305f78a... first function

你需要手动编辑这个文件,决定保留哪些内容。例如,我们保留两个功能:

hello git
aaa
bbb

保存后,告诉Git冲突已解决:

这次推送成功。至此,两位开发者已经完成了第一次并行开发与冲突解决。

不断的git pull/add/commit/push,遇到了冲突,就使用我们之前讲的冲突处理解决掉冲突

四、将开发分支合并到主分支

dev分支上的功能开发完成,测试通过后,就需要将dev分支合并到master分支。这是项目上线前的关键步骤。

4.1 确保本地master是最新的

git checkout master git pull origin master

切换至master分支 , pull 一下,保证本地的 master是最新内容合并前这么做是一个好习惯~

4.2 却换dev分支,处理冲突

切换至dev分支,合并master分支 ,这么做是因为如果有冲突,可以在dev分支上进行处理,而不是在master上解决冲突 ~

git checkout dev git merge master

4.3 切换至master分支,合并dev分支

git checkout master git merge dev cat file.txt

4.4 将master分支推送至远端

git status git push origin master git status
此时,查看远端仓库,master已经是最新代码了

此时,dev 分支对于我们来说就没用了, 那么 dev 分支就可以被删除掉。我们可以直接在远程仓库中 将dev分支删除掉!

总结一下,在同一分支进行多人协作的工作模式通常是这样:

  • 首先,可以试图用 git push origin branch-name推送自己的修改
  • 如果推送失败 , 则因为远程分支比你的本地更新更早,需要先用git pull 试图合并
  • 如果合并有冲突,解决冲突,并在本地提交
  • 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
  • 功能开发完毕,将分支merge进master , 最后删除分支
http://www.jsqmd.com/news/566674/

相关文章:

  • 突破窗口限制:WindowResizer让桌面管理更自由
  • Qwen3-0.6B保姆级部署教程:5分钟无GPU跑通,新手也能玩转
  • 2025年深度评测:掌握Liebling主题,解锁Ghost博客的现代设计潜力
  • 【Gin框架进阶实战】构建高性能WebSocket聊天室:从基础到分布式架构
  • 2026最新宁夏书法艺考集训机构/中心/学校推荐!银川优质培训权威榜单 - 十大品牌榜
  • OpenCore Legacy Patcher技术指南:让老旧Mac焕发新生的系统扩展方案
  • 【Python MCP服务器开发终极模板】:20年架构师亲授源码级解析与高并发优化实战
  • ai辅助开发hnu计算机系统项目:智能反汇编与代码注释生成器
  • 从PyQt5到PySide6:技术栈迁移实战指南
  • langchain调用星火大模型API构建私有LLM
  • DragonOS:基于Rust内核的国产操作系统,如何为云原生时代注入新动力?
  • ClickHouse配置优化实战:关键参数详解与性能调优指南
  • 从手机充电到路由器,聊聊你身边那些‘隐形’的稳压电路是怎么工作的
  • 从实验室到生活场景:近红外脑成像(fNIRS)如何重塑认知研究边界
  • 深度解析:FanControl高级风扇控制实战指南
  • Bootstrap WYSIWYG 安全防护终极指南:如何有效预防XSS攻击
  • 抖音无水印批量下载工具:自媒体运营者的效率倍增方案,5分钟上手
  • 让通用 URL 准确落到目标 Page Builder:SAP Fiori 页面管理中的重定向实践
  • AI看图能力可能是“演出来的”:它在没看图时,也能答对80%
  • 3dsconv高效使用指南:从格式难题到批量转换的实用方案
  • PyTorch Lightning实现旋转分类:90/180/270度检测
  • G-Helper:3个理由让你彻底告别华硕官方控制中心
  • 2025年【CSDN每周小结】
  • Kometa安全配置:API密钥管理、访问控制和数据保护最佳实践
  • qstock量化分析:3行代码实现多市场数据获取与可视化
  • 2026最新宁夏美术艺考集训机构/中心/学校推荐,银川优质之选 - 十大品牌榜
  • 舜宇光学科技2025年净利润大增71.9% 光学版图加速重塑
  • Godot-MCP:打破AI与游戏引擎的次元壁,让自然语言成为你的开发助手
  • 3步搞定黑苹果:OpCore-Simplify让你的PC秒变Mac电脑
  • 收藏级指南|Java开发者必看:5个月搞定大模型转型,抢占AI高薪赛道