GIt的原理和使用(五):模拟多人协作的两种情况

目录

多人协作

多人协作一

准备工作 

 协作开发

多人协作二

准备工作

额外场景

申请单合并分支

更推荐写法 

远程分支删除后,本地git branch -a依然能看到的解决办法


多人协作

多人协作一

  • 目标:在远程master分支下的file.txt文件新增代码“aaa”和“bbb”
  • 实现:由开发者1新增“aaa”,由开发者2新增“bbb”
  • 条件:在一个分支下协作完成

准备工作 

1、在远程仓库中创建一个dev分支(远程分支,很推荐)

2、令linux中的开发者1获取新建的dev分支

  • git branch -r:只显示哪些远程分支已经被拉取到了本地
  • git branch -a:列出所有的分支,包括本地分支和远程分支,如果一个远程分支被拉取到了本地,它将以类似 remotes/origin/branch_name 的形式显示在列表中

3、在windows环境下clone一个和linux中开发者1一样的仓库,模拟开发者2:

        ①D盘新建一个空的git文件夹,进入文件夹,在空白处按住shift+鼠标右键,选择在此处打开PowerShell窗口:

② 将远程仓库克隆给一份给它

 协作开发

1、开发者1在其本地创建一个dev分支,在将该分支切换为工作分支后与远程dev分支建立连接

  • git checkout -b 本地分支名 远程分支名
  • git branch -vv:显示本地分支列表以及每个分支的跟踪信息

2、修改file.txt文件,向其中新增aaa并提交给本地仓库的dev分支

3、将开发者1的本地dev分支提交给远程dev分支 

出现以下界面可以用git config --global push.default matching指令解决:

提交成功: 

4、开发者2在其本地创建一个dev分支,在将该分支切换为工作分支后与远程dev分支建立连接

5、在记事本上修改file.txt文件,新增bbb

6、尝试将开发者2的本地dev分支提交给远程dev分支 

  • 原因:冲突问题,二者都将file.txt文件新增内容提交给远程仓库,远程仓库不知道要用谁的

7、人工解决冲突问题并再次提交(对远程dev分支与当前dev分支合并后出现的冲突进行修改)

8、向远程dev分支推送成功(此时远程master分支中的file.txt文件仍未被修改)

9、合并远程的dev分支和master分支 

远程操作: 

本地操作: 

①将本地dev更新至最新(如果不更本地dev的file.txt没有新增bbb)

②切换至本地master并令本地master为最新状态

如果不更新的话,如果远程master中有ccc但是此时本地master没ccc,在本地master合并了本地dev后进行提交时,该master也没有ccc 

③切换至本地dev,并合并本地master(由于什么都没干所以中间有些内容是没啥东西的)

  • 原因:这样有了冲突也可以在dev上进行修改,直接在master上修改有风险

④切换至本地master,并合并本地dev,最后将合并后的master提交给远程master

⑤查看远程仓库的master分支中的file.txt文件(已被修改)

⑥删除远程dev分支

多人协作二

  • 目标:远程master分支下新增function1和function2文件
  • 实现:由开发者1新增function1,由开发者2新增function2
  • 条件:在不同分支下协作完成

准备工作

①开发者1创建一个feature-1分支,并切换至该分支,同时在该分支下创建并编写function1文件

②将本地feature-1分支推送至远程仓库

本地与远程仓库建立连接的三种方式:(②时的远程仓库中没有设置分支所以后两种方法不能用)

  • git push origin 本地分支名:强制推送本地分支至远程仓库
  • git checkout -b 本地分支名 远程分支名:切换至本地分支时就将该分支与远程分支建立连接
  • git branch -u origin/远程分支名 本地分支名:单纯的将本地分支和远程分支建立连接

③保证开发者2的master分支是最新的版本

④开发者2创建一个feature-2分支,并切换至该分支,同时在该分支下创建并编写function2文件

  • 新建function2文件时直接在对应文件夹下创建function2文本文件即可 

至此已完成初始目标 

额外场景

问题:开发者2生病,开发者1要接替开发者2的工作

①开发者1从远程仓库中获取开发者2的工作内容

对应git pull:

  • 拉取分支中的内容时需要将两个分支建立连接后才能拉取
  • 可以直接拉取仓库内容

②开发者1创建feature-2分支,并切换至该分支,同时将该分支与远程仓库中的feature-2分支连接

③开发者1帮助开发者2继续开发他的function2文件,同时提交至本地feature-2分支 

④将本地feature-2分支更新的内容推送到远程feature-2分支中 

新问题:此时开发者2病好了申请继续开发

①开发者2获取远程仓库中开发者1写了一部分的feature-2分支的内容(不拉就还是一行coding)

② 开发者2完成对function2文件的开发

申请单合并分支

管理者进行审批: 

 

更推荐写法 

        虽然申请单的方式看起来很方便,但是为了防止冲突问题,我们更推荐在副分支上将该副分支与主分支合并后(有冲突问题就解决)再将该分支与主分支合并的方式:

①将开发者1的master分支更新至最新:

② 合并本地的feature-1分支和master分支,如果两个分支没有冲突就会显示以下界面

③查看本地feature-1分支是否与远程的feature-1分支连接

④强制将开发者1的本地feature-1分支推送给远程仓库(新修改的内容覆盖远程的)

⑤提交申请表单申请将远程feature-1分支与远程master分支合并

 ⑥删除远程的feature-1和-2分支 

远程分支删除后,本地git branch -a依然能看到的解决办法

在删除远程仓库的feature-1和feature-2分支后,远程仓库中只有master分支了:

但是此时我们在开发者中使用git branc -a依然能看到原来的feature-1和feature-2分支:

展示远程分支情况指令:git remote show origin

清理无用远程分支:git remote prune 指令名 远程仓库分支名(git branch -a时不会显示)

最后用git branch -d 分支名删除本地的无用分支即可

~over~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/586069.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础框架SSM-----------spring篇

spring系统架构 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)!!!!!!!! IOC(Inversion of Control)控制反转------解耦合 如图使我们所熟悉的基本逻辑,在业务层中调用Dao层的对象,但是当我们Dao层进行修改的时候…

springcloud基本使用二(远程调用)

创建两个springboot maven子项目 子项目名称分别为order-server和user-server 配置user-server子项目: 所需依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependenc…

【数据结构】AVL 树

文章目录 1. AVL 树的概念2. AVL 树节点的定义3. AVL 树的插入4. AVL 树的旋转5. AVL 树的验证6. AVL 树的删除7. AVL 树的性能 前面对 map / multimap / set / multiset 进行了简单的介绍【C】map & set&#xff0c;在其文档介绍中发现&#xff0c;这几个容器有个共同点是…

【前端面试3+1】05v-if和v-show的区别、v-if和v-for能同时使用吗、Vuex是什么?【合并两个有序链表】

一、v-if和v-show的区别 v-if 和 v-show 是 Vue.js 中用来控制元素显示与隐藏的指令。 1.v-if&#xff1a; v-if 是根据表达式的真假值来决定是否渲染元素。当表达式为真时&#xff0c;元素会被渲染到 DOM 中&#xff1b;当表达式为假时&#xff0c;元素不会被渲染到 DOM 中。每…

SWM341系列SDRAM应用

SWM341系列SDRAM应用 1、不同的时钟频率下&#xff0c;SDRAM的初始化参数设置 现象&#xff1a;驱屏应用&#xff0c;显示一段时间后出现卡住的现象 分析&#xff1a;SDRAM的初始 化参数优化 主频150Mhz,建议配置CASL 3&#xff0c;TRFC ≥8。 主频100Mhz,ClkDiv可配置为1…

【记录40】echarts离散图

EchartsEvent(val, data, Ymax) {var _that this;const timestampToTime function(timestamp) {var date new Date(timestamp * 1000);//时间戳为10位需*1000&#xff0c;时间戳为13位的话不需乘1000let Y date.getFullYear() -;let M (date.getMonth()1 < 10 ? 0(da…

3、jvm基础知识(三)

如何判断堆上的对象没有被引用&#xff1f; 常见的有两种判断方法&#xff1a;引用计数法和可达性分析法。 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&#xff0c;取消引用时减1。 引用计数法的优点是实现简单&#xff0c;缺点有两点&#xff1…

Python | Leetcode Python题解之第3题无重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# 哈希集合&#xff0c;记录每个字符是否出现过occ set()n len(s)# 右指针&#xff0c;初始值为 -1&#xff0c;相当于我们在字符串的左边界的左侧&#xff0c;还没…

RWKV_Pytorch:支持多硬件适配的开源大语言模型推理框架

亲爱的技术探索者们&#xff0c;今天我要向大家隆重推荐一个在开源社区中崭露头角的项目——RWKV_Pytorch。这是一个基于Pytorch的RWKV大语言模型推理框架&#xff0c;它不仅具备高效的原生Pytorch实现&#xff0c;而且还扩展了对多种硬件的适配支持&#xff0c;让模型的部署和…

ios 之 netty版本swiftNio(socket创建)

SwiftNio 简介 用于高性能协议服务器和客户端的事件驱动、无阻塞的网络应用程序框架。 SwiftNIO是一个跨平台异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。 这就像Netty&#xff0c;但是为Swift写的。 Xcode引入swiftNio 在实…

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&#xff0c;把接口本地化&#xff0c;但是集成外链播放器…