【Git】多人协作
文章目录
- 完成准备工作
- 多人协作
- 场景一
- 场景二
- 远程分支删除后,本地 git branch -a 依然能看到的解决办法
完成准备工作
在之前,我们所完成的工作如下:
- 基本完成 Git 的所有本地库的相关操作,git基本操作,分支理解,版本回退,冲突解决等等
- 申请码云账号,将远端信息clone到本地,以及推送和拉取。
是时候干最重要的一件事情了,实现多人协作开发!
为了做这件事情,我们需要先做一些准备工作。我们之前已经将项目 clone 到了指定目录,如:

我们在 windows 环境下,再 clone 同一个项目仓库,来模拟和别人一起协作开发:

为了方便,我在这里就使用https的方式 clone 了,首先在Windows下创建一个空目录,点击右键在终端打开

需要注意的是,这里 clone 时,要先将你所对应的仓库的开源。
我们这里是模拟了两个用户,实际开发中,每个用户都有自己的 gitee/github 账号,如果要多人进行协同开发,必须要将用户添加进开发者,用户才有权限进行代码提交:


不同的成员都有不同的权限:

到此,相当于有了两个用户,分别在linux和windows上针对于同项目进行协作开发,我们的准备工作到此结束。
目前,我们的仓库中只有一个master主分支,但在实际的项目开发中,在任何情况下其实都是不允许直接在master分支上修改代码的,这是为了保证主分支的稳定。所以在开发新功能时,常常会新建其他分支,供开发时进行迭代使用。
那么接下来,就让我们在gitee上新建dev远程分支供我们使用:

创建成功的远程分支是可以通过 Git 拉取到本地来,以实现完成本地开发工作。
之前讲的 git branch 其实只能查看本地分支,要查看远程分支需要加上 -r 选项。
但前提是要 pull 一下拉取最新的远端仓库,才能看到最新的内容。

拉取后便可以看到远程的 dev 分支,接着切换到 dev 分支供我们进行本地开发。要说明的是,我们切换到的是本地的 dev 分支,根据示例中的操作,会将本地分支和远程分支的进行关系链接 git checkout -b [本地分支名] [origin/远端分支名] 。

这里如果创建了分支,但没有与远端的分支相关联,可以使用如下命令进行关联:
git branch --set-upstream-to=origin/[远端分支名] [本地分支名]
这步操作是在本地创建了一个 dev 分支,并且该分支与远端的 origin/dev 相关联,我们也可以使用命令 git branch -vv 来查看本地与远程分支的相关联信息:

对于Windows用户来说,操作与上面也是一样的

现在,我们模拟的两个用户就可以在 dev 上完成开发。
多人协作
场景一

首先,我先在Linux上的 dev 分支上进行一次开发,并 push 到远程。例如:

让我们来看看码云上目前仓库的状态:

至此,我们已经将代码成功推送至码云,接下来假如Windows用户要和Linux用户协同开发,碰巧也要对 file.txt 文件作修改,并试图推送,例如:

这时推送失败,因为 Windows 用户的最新提交和 Linux 用户推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用 git pull 把最新的提交从 origin/dev 抓取下来,然后,在本地进行合并,并解决冲突,再推送。操作如下:

解决冲突,重新推送:

此时,我们看到远端的码云已经能看到我们的新提交了!

由此,两名开发者已经开始可以进行协同开发了,不断的 git pull/add/commit/push ,遇到了冲突,就使用我们之前讲的冲突处理解决掉冲突。 对于你来说,要想看到别人的代码,只需要 pull 一下即可,例如:

最后不要忘记,虽然我们是在分支上进行多人协作开发,但最终的目的是要将开发后的代码合并到 master上去,让我们的项目运行最新的代码。接下来我们就需要做这件事情了:
- 第一步
切换至 master 分支, 先git pull一下,保证本地的 master 是最新内容。合并前这么做是一个好习惯,因为这是多人协作,防止别人先上传了,我们的 master 分支不是最新版的。

- 第二步
切换至 dev 分支, 合并 master 分至,这么做是因为如果有冲突,可以在dev分支上进行处理,而不是在在 master 上解决冲突。这么做是一个好习惯,千万不要觉得冗余。

- 第三步
切换至 master 分支,合并 dev 分支

- 第四步
将 master 分支推送至远端

此时,查看远端仓库,master 已经是最新代码了:

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

总结一下,在同一分支下进行多人协作的工作模式通常是这样:
- 首先,可以试图用
git push origin branch - name推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin branch - name推送就能成功! - 功能开发完毕,将分支
merge进master,最后删除分支。
场景二

一般情况下,如果有多需求需要多人同时进行开发,是不会在一个分支上进行多人开发,而是一个需求或一个功能点就要创建一个 feature 分支。
现在同时有两个需求需要Linux用户和Windows用户进行开发,那么这两个用户便可以各自创建一个分支来完成自己的工作。在上面我们已经了解了可以从码云上直接创建远程分支,其实在本地创建的分支也可以通过推送的方式发送到远端。在这里我们就来用一下这种方式。
Linux用户:
- 创建本地分支并切换

- 新增需求内容:创建function1文件,将 feature-1 分支推送到远端

Windows用户:

此时,在本地,两个用户看不到对方新建的文档。并且推送各自的分支时,并没有任何冲突,两个用户互不影响,用起来很舒服!
再来看下远端码云上此时的状态:

对于Linux用户的分支:

对于 Windows 用户的分支:

正常情况下,两个用户就可以在自己的分支上进行专业的开发了!
但天有不测风云,Windows用户突然生病了,但需求还没开发完,需要Linux用户帮他继续开发,于是他便把feature-2分支名告诉你了。这时你就需要在自己的机器上切换到feature-2分支帮忙继续开发,要做的操作如下:
- 第一步
必须先拉取远端仓库内容

- 第二步
切换到 feature-2 分支上,可以和远程的feature-2分支关联起来,否则将来只使用 git push 推送内容会失败

切换成功后,便可以看见 feature-2 分支中的 function2 文件了,接着就可以帮Windows用户进行开发,并推送内容:

查看远程状态,推送成功了:

这时,Windows用户已经修养得差不多,可以继续进行自己的开发工作,那么他首先要获取到你帮他开发的内容,然后接着你的代码继续开发。或者你已经帮他开发完了,那他也需要在自己的电脑上看看你帮他写的代码:

Pull 无效的原因是Windows用户没有指定本地 feature-2 分支与远程 origin/feature-2 分支的链接,根据提示,设置feature-2和origin/feature-2的链接即可:

目前,Windows用户的本地代码和远端保持严格一致。Linux用户和Windows用户可以继续在不同的分支下进行协同开发了…
各自功能开发完毕后,不要忘记我们需要将代码合并到 master 中才算真正意义上的开发完毕。
由于Linux用户和Windows用户率先开发完毕,于是开始merge,这里介绍另外一种方式:

此时这里就变成了1:

随后我们点进去:

到这里就不是开发人员所管理的了,接下来会有专门的人来对你的代码进行查阅与评估:



当相关的人员做完以上流程我们的分支就合并到了master分支上了

我们去看看主分支上的文件:

这个过程是这样的:

远程分支删除后,本地 git branch -a 依然能看到的解决办法
当前我们已经删除了远程的几个分支,使用git branch -a命令可以查看所有本地分支和远程分支,但发现很多在远程仓库已经删除的分支在本地依然可以看到。例如:


使用命令 git remote show origin ,可以查看 remote 地址,远程分支,还有本地分支与之相 对应关系等信息。

此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用 git remote prune origin 命令:

这样就能成功解决了。
相关文章:
【Git】多人协作
文章目录 完成准备工作多人协作场景一场景二远程分支删除后,本地 git branch -a 依然能看到的解决办法 完成准备工作 在之前,我们所完成的工作如下: 基本完成 Git 的所有本地库的相关操作,git基本操作,分支理解&#…...
Python爬虫-破解字体加密技术
前言 本文是该专栏的第77篇,后面会持续分享python爬虫干货知识,记得关注。 字体加密是一种常见的反爬虫技术,通过自定义字体文件和字符映射来保护网页内容,防止爬虫直接获取文本信息。 在文章《Python爬虫-猫眼电影的影院数据》中,笔者有详细介绍过猫眼的相关数据采集。…...
邮件安全之发件人伪造
电子邮件工作原理 电子邮件传输过程中主要涉及到SMTP、IMAP、POP3三种协议,具体功能如下: SMTP:全称Simple Mail Transfer Protocol,即简单邮件传输协议,主要用于发送邮件,使用端口号25。 IMAP:全称Internet Mail Acce…...
git 常用功能
以下是 Git 的常用功能及其命令: 初始化仓库 git init在当前目录初始化一个新的 Git 仓库。 克隆仓库 git clone <仓库地址>将远程仓库克隆到本地。 查看状态 git status查看工作区和暂存区的状态。 添加文件到暂存区 git add <文件名>将文件添…...
【llm落地】从零到一,用DeepSeek打造智能BI工具:自然语言驱动数据洞察
在数据驱动的时代,商业智能 (BI) 工具已经成为企业决策的关键。然而,传统的 BI 工具往往操作复杂,需要专业技能才能驾驭。想象一下,如果用户只需要用 自然语言 就能轻松查询数据、获取分析结果甚至生成可视化图表,那将会多么高效和便捷! 本文将带你踏上从零到一构建智能…...
请谈谈 Vue 中的 key 属性的重要性,如何确保列表项的唯一标识?
1. Key属性的核心作用(附代码对比) // 错误示例:未使用key的列表渲染 <template><ul><li v-for"item in items">{{ item.text }}</li></ul> </template>// 正确示例:使用唯一key的…...
使用 AIStor 和 OpenSearch 增强搜索功能
在这篇文章中,我们将探讨搜索,特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如,如果您正在查看运营数据,如果您的服务似乎是随机的,那么您需要尽可能回溯以识别模式并找出原因。这不仅适用…...
Node.js中如何修改全局变量的几种方式
Node.js中如何修改全局变量。我需要先理解他们的需求。可能他们是在开发过程中遇到了需要跨模块共享数据的情况,或者想要配置一些全局可访问的设置。不过,使用全局变量可能存在一些问题,比如命名冲突、难以维护和测试困难,所以我得…...
基于Python和Neo4j开发的医疗辅助诊断系统的详细实现步骤和代码示例
以下是一个基于Python和Neo4j开发的医疗辅助诊断系统的详细实现步骤和代码示例。 1. 环境准备 首先,确保你已经安装了必要的库。可以使用以下命令进行安装: pip install py2neo2. Neo4j数据库初始化 在Neo4j中创建一个新的数据库,并启动N…...
第9章:LangChain结构化输出-示例2(数字提取服务)
如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解,将自然语言处理任务(如情感分析、数字提取、日期提取、POJO提取等)封装为服务,并通过LangChain4j的AiServices动态生成这些服务的实现。 本章主要讲述基于Lan…...
【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新
note (1)未来的工作需亟待解决: 支持大规模 RL 训练(PPO、GRPO 等)的开源基础框架用于稳定训练的 GRPO 训练超参的自动化调优RL 训练数据的配比(难度、领域、任务等)基于 Instruct 模型训练 R…...
买股票的最佳时机 - 2
买卖股票的最佳时机 III 题目描述: 提示: 1 < prices.length < 1050 < prices[i] < 105 分析过程: 写动态规划,我们需要考虑一下问题: 定义状态状态转移方程初始条件 遍历顺序 4种状态: …...
Python基于flask的智慧交通可视化,大数据智慧交通数据可视化系统
博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【Unity】鱼群效果模拟
鱼群效果模拟 文章目录 鱼群效果模拟Boid算法实现方式version1_CPUversion2_GPUversion3_Multilaterationversion4_Bitonic_Sorting (GPU友好)version5_Skinning (TODO) 细节项优化项参考链接 Boid算法 Boid算法是一种模拟群体行…...
Unity使用IL2CPP打包时,我们应该注意什么?如何避免(可以举例说明)
这一篇部分内容在Unity之中如何处理C#底层代码那篇博客之中有提及,接下来对这部分进行补充说明。(请先阅读--Unity之中如何处理C#底层代码) 目录 1 注意点 2 如何避免 1 注意点 IL2CPP 在编译过程中会将 IL(中间语言…...
Wireshark使用介绍
文章目录 Wireshark介绍Wireshark使用工作模式介绍1. 混杂模式(Promiscuous Mode)2. 普通模式(Normal Mode)3. 监视模式(Monitor Mode) 界面分区捕获过滤器语法基本语法逻辑运算符高级语法使用示例捕获过滤…...
云图库平台(五)——后端图片模块开发
目录 一、需求分析二、库表设计三、图片的处理如何实现图片的上传和下载创建图片的业务流程如何对图片进行解析 四、创建并使用对象存储五、后端操作对象存储初始化客户端通用能力类文档上传文件下载 一、需求分析 管理员功能: 图片的上传和创建:仅管理…...
postman调用ollama的api
按照如下设置,不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住:110,1-12,之后所有数学计算必…...
十、OSG学习笔记-多线程(OpenThreads)
上一节内容: 九、OSG学习笔记-NodeVisitor节点遍历器-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145742756?spm1001.2014.3001.5501 本章节代码: OsgStudy/Openthreads CuiQingCheng/OsgStudy - 码云 - 开源中国https://gite…...
Gemma 2 的滑动窗口注意力(Sliding Window Attention)解析:源代码
Gemma 2 的滑动窗口注意力(Sliding Window Attention)解析 在 Transformer 结构 中,自注意力(Self-Attention)是核心机制之一。然而,标准的自注意力计算复杂度为 ( O ( n 2 ) O(n^2) O(n2) ),随…...
机器学习数学通关指南——链式法则
前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 一、定义与公式 链式法则&a…...
Python爬虫实战:从零到一构建数据采集系统
文章目录 前言一、准备工作1.1 环境配置1.2 选择目标网站 二、爬虫实现步骤2.1 获取网页内容2.2 解析HTML2.3 数据保存 三、完整代码示例四、优化与扩展4.1 反爬应对策略4.2 动态页面处理4.3 数据可视化扩展 五、注意事项六、总结互动环节 前言 在大数据时代,数据采…...
DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【行业解决方案篇十八】【DeepSeek航空航天:故障诊断专家系统 】
引言:为什么说这是“航天故障终结者”? 2025年春节刚过,航天宏图突然官宣"DeepSeek已在天权智能体上线",这个搭载在卫星和空间站上的神秘系统,号称能提前48小时预判99.97%的航天器故障。这不禁让人想起年初NASA禁用DeepSeek引发的轩然大波,更让人好奇:这套系…...
谷歌浏览器更新后导致的刷新数据无法显示
这几天突然出现的问题,就是我做了一个网站,一直用Google展示,前两天突然就是刷新会丢失数据,然后再刷新几次吧又有了,之前一直好好的,后端也做了一些配置添加了CrossOrigin注解,然而换了edge浏览…...
nvidia-docker2 和 NVIDIA Container Toolkit 的区别及推荐
NVIDIA Docker 和 NVIDIA Container Toolkit 1. NVIDIA Docker 和 NVIDIA Docker2 nvidia-docker 是 NVIDIA 最早推出的工具,用于在 Docker 容器中启用 GPU 支持。它以独立守护进程的形式作为 Volume Plugin 存在,但与 Docker 生态系统的兼容性较差&am…...
游戏设计模式阅读 - 游戏循环
游戏与普通程序最大的不同点在于: 游戏不像其他大多数软件,游戏即使在没有玩家输入时也继续运行。 如果你站在那里看着屏幕,游戏也不会冻结。动画会持续播放。视觉效果继续闪烁。 如果运气不好的话,怪物会继续暴揍你的角色。 那么…...
(五)趣学设计模式 之 建造者模式!
目录 一、 啥是建造者模式?二、 为什么要用建造者模式?三、 建造者模式怎么实现?四、 建造者模式的应用场景五、 建造者模式的优点和缺点六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方…...
github 怎么创建一个私有repository 并从另外一台电脑拉取下来更新
1.github上新建一个repository 设置为private tips删除在这 点setting 然后往下拖动 会有个这里是用来删项目的 2.另外 一台电脑拉取这个repository的时候 需要配置 一个ssh key 这个key的内容生成参考本地电脑的生成 然后在这配置 2.1 生成 SSH 密钥(如果还没有…...
Spring Boot嵌入式服务器深度解析:从配置到调优的全方位指南
文章目录 引言一、嵌入式服务器核心原理1.1 架构设计特点1.2 主流服务器对比 二、嵌入式服务器配置实战2.1 基础配置模板2.2 HTTPS安全配置 三、高级调优策略3.1 线程池优化(Tomcat示例)3.2 响应压缩配置3.3 访问日志配置 四、服务器切换实战4.1 切换至U…...
