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

[Git][多人协作][下]详细讲解

目录

  • 1.不同分支下多人协作
  • 2.远程分⽀删除后,本地`git branch -a`依然能看到


1.不同分支下多人协作

  • ⼀般情况下,如果有多需求需要多⼈同时进⾏开发,是不会在⼀个分⽀上进⾏多⼈开发,⽽是⼀个需求或⼀个功能点就要创建⼀个feature分⽀
  • 情景设置
    • 目标:远程main分支下新增func1func2文件
    • 实现:开发者A新增func1,开发者B新增func2
    • 条件:不同分支下协作完成,各自让某一个功能私有某一个分支
  • 开发者A:在自己分支上,正常推送,没有问题
    $ vim func1
    $ cat func1
    fun1 from A$ git add .
    $ git commit -m "A push func1"
    [feature-1 84e77e0] A push func11 file changed, 1 insertion(+)create mode 100644 func1$ git push origin feature-1
    Enumerating objects: 4, done.
    Counting objects: 100% (4/4), done.
    Delta compression using up to 20 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 318 bytes | 159.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    To github.com:DieSnowK/Git-Learn.git10cd204..84e77e0  feature-1 -> feature-1
    
  • 开发者B:在自己分支上,正常推送,没有问题
    $ cat func2
    fun2 fron B$ git add .
    $ git commit -m "B push func2"
    [feature-2 31c8cbb] B push func21 file changed, 1 insertion(+)create mode 100644 func2$ git push origin feature-2
    Enumerating objects: 4, done.
    Counting objects: 100% (4/4), done.
    Delta compression using up to 20 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 343 bytes | 343.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    To github.com:DieSnowK/Git-Learn.git10cd204..31c8cbb  feature-2 -> feature-2
    PS C:\Users\w1752\Desktop\My_Repository\Git-Learn>
    
  • 至此,开发者A和开发者B都互相看不到对方开发的文档,并且在自己的分支上各自推送时,没有任何冲突,两人互不影响,开发起来很丝滑
  • 假如此时开发者B无法继续完成文档开发,需要开发者A接手,该怎么办?
    • 开发者B将自己的分支名告诉开发者A,开发者A从远端仓库将该分支拉下来
      $ git branch
      * feature-1main$ git pull
      remote: Enumerating objects: 4, done.
      remote: Counting objects: 100% (4/4), done.
      remote: Compressing objects: 100% (2/2), done.
      remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
      Unpacking objects: 100% (3/3), 323 bytes | 323.00 KiB/s, done.
      From github.com:DieSnowK/Git-Learn* [new branch]      feature-2  -> origin/feature-2
      There is no tracking information for the current branch.
      Please specify which branch you want to merge with.
      See git-pull(1) for details.git pull <remote> <branch>If you wish to set tracking information for this branch you can do so with:git branch --set-upstream-to=origin/<branch> feature-1
      
    • 开发者A本地创建一个feature-2分支,并且和远端的feature-2分支关联起来
      $ git checkout -b feature-2 origin/feature-2
      Branch 'feature-2' set up to track remote branch 'feature-2' from 'origin'.
      Switched to a new branch 'feature-2'$ cat func2
      fun2 from B$ vim func2 # Coding...$ cat func2
      fun2 fron B
      fun2 Done from A$ git add .$ git commit -m "A edit func2 Done"
      [feature-2 2e279ac] A edit func2 Done1 file changed, 2 insertions(+), 1 deletion(-)$ git push origin feature-2
      Enumerating objects: 5, done.
      Counting objects: 100% (5/5), done.
      Delta compression using up to 20 threads
      Compressing objects: 100% (2/2), done.
      Writing objects: 100% (3/3), 280 bytes | 280.00 KiB/s, done.
      Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
      remote: Resolving deltas: 100% (1/1), completed with 1 local object.
      To github.com:DieSnowK/Git-Learn.git31c8cbb..2e279ac  feature-2 -> feature-2
      
  • 两人开发全部完毕后,都需要将各自的代码合并到main中才算真正的开发完毕,流程如下
    • 开发者A

      • 切换至maingit pull,保证本地main是最新内容

      • 切换至feature-1分支,合并main分支,有冲突就在feature-1分支解决

      • 切换至main分支,合并feature-1分支

      • main分支推送至远端
        请添加图片描述

        $ git checkout main
        Switched to branch 'main'
        Your branch is up to date with 'origin/main'.$ git pull
        Already up to date.$ git checkout feature-1
        Switched to branch 'feature-1'$ git merge main
        Already up to date.$ git checkout main
        Switched to branch 'main'
        Your branch is up to date with 'origin/main'.$ git merge feature-1
        Updating 10cd204..84e77e0
        Fast-forwardfunc1 | 1 +1 file changed, 1 insertion(+)create mode 100644 func1$ cat func1
        fun1 from A$ git push
        Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
        To github.com:DieSnowK/Git-Learn.git10cd204..84e77e0  main -> main
        
    • 开发者B

      • 切换至maingit pull,保证本地main是最新内容

      • 切换至feature-2分支,合并main分支,有冲突就在feature-2分支解决

      • 由于feature-1分支已经merge进来了新内容,为了保证feature-2远程分支最新,最好在此时git push一下

        • git push的另一个原因是在实际的开发中,mainmerge操作⼀般不是由我们⾃⼰在本地进进行,而是由审查人员进行
        • 其他⼈员或某些平台merge时,操作的肯定是远程分⽀,所以就要保证远程分⽀的最新
        • 如果此时merge发生冲突,解决完冲突后需要commit之后才能push
      • 切换至main分支,合并feature-2分支

      • main分支推送至远端
        请添加图片描述

        $ git checkout main
        Switched to branch 'main'
        Your branch is up to date with 'origin/main'.$ git pull
        Already up to date.$ git checkout feature-2
        Switched to branch 'feature-2'
        Your branch is up to date with 'origin/feature-2'.$ git merge main
        Merge made by the 'ort' strategy.func1 | 1 +1 file changed, 1 insertion(+)create mode 100644 func1$ ls
        SnowK.txt  func1  func2$ git status
        On branch feature-2
        Your branch is ahead of 'origin/feature-2' by 2 commits.(use "git push" to publish your local commits)nothing to commit, working tree clean$ git push
        Enumerating objects: 4, done.
        Counting objects: 100% (4/4), done.
        Delta compression using up to 20 threads
        Compressing objects: 100% (2/2), done.
        Writing objects: 100% (2/2), 292 bytes | 292.00 KiB/s, done.
        Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
        remote: Resolving deltas: 100% (1/1), completed with 1 local object.
        To github.com:DieSnowK/Git-Learn.git2e279ac..2250eeb  feature-2 -> feature-2$ git checkout main
        Switched to branch 'main'
        Your branch is up to date with 'origin/main'.$ git merge feature-2
        Updating 84e77e0..2250eeb
        Fast-forwardfunc2 | 2 ++1 file changed, 2 insertions(+)create mode 100644 func2$ ls
        SnowK.txt  func1  func2$ git push
        Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
        To github.com:DieSnowK/Git-Learn.git84e77e0..2250eeb  main -> main
        
  • 至此,无论本地还是远端的feature-1feature-2分支都没用了,可以直接删掉了

2.远程分⽀删除后,本地git branch -a依然能看到

  • 问题描述:明明已经删除了远程的⼏个分⽀,但使⽤git branch -a发现很多在远程仓库已经删除的分⽀在本地依然可以看到
  • 问题追溯git remote show origin
    $ git remote show origin
    * remote originFetch URL: git@github.com:DieSnowK/Git-Learn.gitPush  URL: git@github.com:DieSnowK/Git-Learn.gitHEAD branch: mainRemote branches:main                     trackedrefs/remotes/origin/dev  stale (use 'git remote prune' to remove)refs/remotes/origin/test stale (use 'git remote prune' to remove)Local branch configured for 'git pull':main merges with remote mainLocal ref configured for 'git push':main pushes to main (up to date)
    
  • 解决方案:使用git remote prune origin命令
    $ git remote prune origin
    Pruning origin
    URL: git@github.com:DieSnowK/Git-Learn.git* [pruned] origin/dev* [pruned] origin/test
    

相关文章:

[Git][多人协作][下]详细讲解

目录 1.不同分支下多人协作2.远程分⽀删除后&#xff0c;本地git branch -a依然能看到 1.不同分支下多人协作 ⼀般情况下&#xff0c;如果有多需求需要多⼈同时进⾏开发&#xff0c;是不会在⼀个分⽀上进⾏多⼈开发&#xff0c;⽽是⼀个需求或⼀个功能点就要创建⼀个feature分…...

MySQL笔记(七):索引

一、索引优化速度 创建对应字段的索引&#xff0c;只对该列有效&#xff0c;只能提高该列的查询速度 创建索引后&#xff0c;查询速度变快&#xff0c;但是表占用空间变大 create index 索引名 on 表名(需要创建索引的列)二、索引的原理 普通索引允许该字段重复 全文索引&#…...

JS 原型和原型链

构造函数 封装是面向对象思想中比较重要的一部分&#xff0c;js 面向对象可以通过构造函数实现的封装。 同样的将变量和函数组合到了一起并能通过 this 实现数据的共享&#xff0c;所不同的是 JS 借助构造函数创建出来的实例对象之间是彼此不影响的 存在浪费内存的问题&#…...

【无标题】图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换

图像增强技术&#xff1a;直方图均衡化、拉普拉斯算子、对数变换与伽马变换 在图像处理领域&#xff0c;图像增强是一种关键技术&#xff0c;用于提升图像的视觉效果和质量。本文将介绍四种常用的图像增强方法&#xff1a;直方图均衡化、拉普拉斯算子、对数变换和伽马变换。我…...

自动化专业英语

前言 电子信息、电气工程、自动化专业英语词汇汇总&#xff0c;不定期更新 常用 Asynchronous&#xff1a;异步synchronous&#xff1a;同步notification&#xff1a;通知blade&#xff1a;平面shaft&#xff1a;轴magnetic&#xff1a;磁场的bearing&#xff1a;轴承valve&…...

如何使用 Python 进行数据可视化,比如绘制折线图?

要使用Python进行数据可视化&#xff0c;可以使用matplotlib库来绘制折线图。以下是一个简单的示例代码&#xff1a; 首先&#xff0c;确保已安装matplotlib库。可以使用以下命令安装&#xff1a; pip install matplotlib在Python脚本中导入matplotlib库&#xff1a; import…...

PostgreSQL数据库的事务ID和事务机制

PostgreSQL后续简称PG。PG只读事务不会分配事务ID。为了在共享锁等情况下对事务进行标识&#xff0c;需要一种非持久化的事务ID&#xff0c;即虚拟事务ID&#xff0c;vxid。虚拟事务ID不需要把事务ID持久化到磁盘。因为事务ID是很宝贵的资源&#xff0c;简单的select语句不会申…...

LeetCode 热题 HOT 100 (020/100)【宇宙最简单版】[创作中]

【链表】No. 0142 环形链表 II【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#…...

XML动态sql查询当前时间之前的信息报错

如图&#xff0c;sql语句在数据库里可以正常运行但是再XML文件不可以正常运行&#xff0c;报错。 原因&#xff1a;在XML中小于号"<"是会被默认认定成文一个标签的开始&#xff0c;所以用小于号就会报错。 解决办法&#xff1a; 1.把表达式反过来改成大于号 2…...

EMQX服务器安装MQTT测试

cd /usr/local/develop wget https://www.emqx.com/en/downloads/broker/5.7.1/emqx-5.7.1-el7-amd64.tar.gz mkdir -p emqx && tar -zxvf emqx-5.7.1-el7-amd64.tar.gz -C emqx ./emqx/bin/emqx start 重启 ./emqx/bin/emqx restart http://10.8.0.1:18083/ 账号ad…...

3. 无重复字符的最长子串(滑动窗口)

目录 &#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 二&#xff1a;代码&#xff1a; class Solution { …...

用javaagent和javassist实现Arthas的watch功能

一、被监控的服务 spring-boot-demo 1、 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&q…...

golang 图片转1bit color bmp图片

问题背景 一些打印机需要的都是1bit color bmp图片,但是golang中没有直接的办法,官方image库最低bpp为8,打印机无法使用。 在github上找到了很多资源,都没有直接能转的,突然看到一个老外,可以支持plattered图片转位1bit color bmp图片,然后自己先把图片转位plattered黑…...

Leetcode75-5 反转字符串的元音字母

本质上来说就是反转字符串 一部分需要反转 一部分不动 思路: 1.用String字符串倒序拼接 就是过滤掉不是元音字符 然后把所有的字符&#xff08;非元音的直接复制过来 元音字母直接从反转的字符串里边复制即可&#xff09; 2.看了题解发现自己写的啰嗦了 就是一个双指针问题用…...

static关键字在Java中的作用与用法

static关键字在Java中的作用与用法 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java中&#xff0c;static关键字是一个非常重要的概念&#xff0c;用于定义静态成员、方法和内部类。它的使用可…...

50etf期权行权采用什么交割方式 ?

50ETF期权是欧式期&#xff0c;要到期日当天才能行权交制&#xff0c;其交割方式是实物交割买卖双方在到期行权日时需要准备一手交钱&#xff0c;一手收货或是一手交&#xff0c;一手收钱&#xff0c;如果持有期权到达到期日之前&#xff0c;投资者认为行权并不划算&#xff0c…...

ts-node 报错 ERR_UNKNOWN_FILE_EXTENSION

问题 有个monorepo项目&#xff0c;在最外层一次性打包 3 个项目的脚本已经成功实现&#xff0c;如下&#xff1a; "build:test": "cross-env NODE_ENVtest vite build --mode test && esno ./build/script/postBuild.ts", "build:prod"…...

水域救援设备,保护水域安全_鼎跃安全

季作为一年中最炎热的季节&#xff0c;不仅带来了难耐的高温&#xff0c;也悄然间加剧了水域安全问题的严峻性。这一时期&#xff0c;正值学生群体享受悠长暑假的宝贵时光&#xff0c;他们往往倾向于寻找清凉之地以解酷暑&#xff0c;水域因此成为了不少学生的首选之地。然而&a…...

openmetadata本地编译环境搭建

openmetadata本地编译环境搭建 本地环境&#xff1a; Docker 20 or higher Java JDK 17 Antlr 4.9.2 - sudo make install_antlr_cli JQ - brew install jq (osx) apt-get install jq (Ubuntu) Maven 3.5.x or higher - (with Java JDK 11) Python 3.7, 3.8 or 3.9 Node…...

LeetCode Hard|【25. K 个一组翻转链表】

力扣题目链接 首先我们考虑一种很直观的思路&#xff1a; 遍历链表&#xff0c;统计链表长度遍历链表&#xff0c;进行翻转 对于每一组长度为 K 的节点&#xff0c;进行翻转如果剩余节点不足 K 个&#xff0c;则不进行翻转 连接翻转后的子链表 这里我们用的就是只用 O(1) 额外内…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

7种分类数据编码技术详解:从原理到实战

在数据分析和机器学习领域&#xff0c;分类数据&#xff08;Categorical Data&#xff09;的处理是一个基础但至关重要的环节。分类数据指的是由有限数量的离散值组成的数据类型&#xff0c;如性别&#xff08;男/女&#xff09;、颜色&#xff08;红/绿/蓝&#xff09;或产品类…...

可下载旧版app屏蔽更新的app市场

软件介绍 手机用久了&#xff0c;app越来越臃肿&#xff0c;老手机卡顿成常态。这里给大家推荐个改善老手机使用体验的方法&#xff0c;还能帮我们卸载不需要的app。 手机现状 如今的app不断更新&#xff0c;看似在优化&#xff0c;实则内存占用越来越大&#xff0c;对手机性…...

C++参数传递 a与a的区别

在 C 中&#xff0c;&a&#xff08;引用&#xff09;和 a&#xff08;值传递&#xff09; 的关键区别在于 参数如何传递给函数&#xff0c;以及由此引发的 性能、语义和安全问题。 最核心的在于你想不想传入的参数被改变&#xff0c;如果想&#xff0c;就用参数传递&#…...

Razor编程中@Helper的用法大全

文章目录 第一章&#xff1a;Helper基础概念1.1 Helper的定义与作用1.2 Helper的基本语法结构1.3 Helper与HtmlHelper的区别 第二章&#xff1a;基础Helper用法2.1 无参数Helper2.2 带简单参数的Helper2.3 带默认值的参数2.4 使用模型作为参数 第三章&#xff1a;高级Helper用法…...

Nginx 事件驱动理解

在做埋点采集服务的过程中&#xff0c;主要依靠openresty加lua脚本来实现采集。高并发还是主要依靠nginx来实现。而其核心就是事件驱动/多路io复用&#xff08;epoll机制&#xff09;&#xff0c;不同的linux服务器都有对应的实现方式。 而epoll机制就是&#xff0c;应用启动的…...