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

多人协作开发指南二

目录

一、多人协作开发指南二

二、清理本地已删除的远程分支:Git 远程分支同步指南

1、问题现象

2、解决方法

方法一:使用 git remote prune 命令(推荐)

1. 查看远程分支状态

2. 清理本地缓存的分支

3. 验证清理结果:

方法二:使用 git fetch 命令同步

3、补充说明


一、多人协作开发指南二

        通常情况下,如果有多个需求需要多人并行开发,不会直接在同一个分支上进行协作,而是每个需求或功能点都创建一个独立的 feature 分支。

        假设现在有两个需求需要你和同事分别开发,你们可以各自创建一个分支来完成工作。前文已经介绍过如何在码云上直接创建远程分支,其实本地创建的分支也可以通过推送的方式同步到远端。接下来,我们就来实际操作一下这个方法。

对于你来说,可以进行以下操作:

新增本地分支 feature-1 并切换

新增需求内容,创建function1文件

将 feature-1 分支推送到远端

对于小伙伴来说,可以进行以下操作:

        首先在从远程仓库克隆下来的gitcode中创建一个空白文档,内容为"Done!",跟上面保持一致!!!

        在本地环境中,你无法查看对方新建的文档,对方也看不到你创建的文件。当各自推送分支时不会产生任何冲突,彼此互不干扰,使用体验非常顺畅!现在让我们看看远端码云上的实时状态:

对于你的feature-1分支:

对于小伙伴的feature-2分支:

        你们可以各自在专属分支上专注开发。但突发状况时有发生——你的同事因病无法继续完成需求开发,于是将 feature-2 分支交接给你继续开发。这时你需要切换到该分支,具体操作如下:

必须先拉取远端仓库内容

可以看到远程已经有了feature-2

git branch -a

        将当前分支切换至feature-2,并与远程的feature-2分支建立关联。若不进行此操作,后续直接使用git push命令推送代码时将会失败。

git checkout -b feature-2 origin/feature-2

这个命令实际上一次性完成了两个操作,可以拆解来看:

git checkout -b feature-2

  • checkout 命令用于切换分支。

  • -b 选项告诉 Git创建一个新的分支。

  • feature-2 是你想要在本地创建的新分支的名称。

origin/feature-2

  • 这是指定新分支的“起点”或“跟踪对象”。(建立跟踪关系(关键):自动设置本地 feature-2 分支跟踪(track) 远程的 origin/feature-2 分支

  • origin 是你的远程仓库的默认别名。

  • origin/feature-2 指的是远程仓库(origin)上的 feature-2 分支在你本地仓库的缓存。

切换成功后,就能在 feature-2 分支中看到 function2 文件,接下来可以协助小伙伴进行开发:

继续开发、推送内容

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

        当你的小伙伴恢复状态后,可以继续开发工作。他需要先获取你帮他开发的内容,接着你的代码继续开发。如果你已经帮他完成了开发,他也需要在自己电脑上查看你编写的代码。

        Pull操作失败是因为用户未建立本地feature-2分支与远程origin/feature-2分支的关联。根据提示,只需将本地feature-2分支与远程origin/feature-2分支建立对应关系即可解决。

git branch --set-upstream-to=origin/feature-2 feature-2

这个命令用于手动建立或修改本地分支与远程分支的跟踪关系

参数解析

  • git branch:分支管理命令。

  • --set-upstream-to= 或 -u:选项,意为“设置上游分支”。

  • origin/feature-2:你希望设置为上游(Upstream) 的远程分支。这是跟踪的目标。

  • feature-2:你当前所在的本地分支。这是需要被设置跟踪关系的分支。

命令的整体作用:将本地已存在的 feature-2 分支的上游(跟踪关系)设置为远程仓库(origin)上的 feature-2 分支。

详细工作流程

当你执行这个命令时,Git 会:

  1. 检查分支:确认本地的 feature-2 分支存在。

  2. 检查远程引用:确认远程仓库 origin 上存在 feature-2 分支(即 origin/feature-2 这个引用存在)。

  3. 建立关联:在本地仓库的配置中,记录一条信息:“本地分支 feature-2 的跟踪对象是 origin/feature-2”。

建立跟踪关系的好处

这与上一个命令的好处完全相同,是 Git 工作流高效的关键:

  • 简化推送 (git push):之后当你位于本地 feature-2 分支时,只需输入 git push,Git 就知道应该推送到 origin/feature-2,而无需完整地写成 git push origin feature-2

  • 简化拉取 (git pull):同样,只需输入 git pull,Git 就会自动从 origin/feature-2 拉取最新的更改并合并到本地 feature-2 分支,无需指定远程和分支名。

  • 状态显示 (git status):执行 git status 时,它会显示你的本地分支是领先、落后还是已经分叉于其跟踪的远程分支,例如:

    • Your branch is up to date with 'origin/feature-2'. (分支是最新的)

    • Your branch is behind 'origin/feature-2' by 1 commit, and can be fast-forwarded. (你的分支落后了 1 个提交)

适用场景

这个命令通常在以下情况下使用:

  1. 补救未建立跟踪的分支:你之前通过其他方式(如 git checkout -b feature-2)创建了一个本地分支,并且已经手动将它推送到了远程(git push -u origin feature-2忘了加 -u 选项),导致本地分支没有建立跟踪关系。此时可以用这个命令来补救。

  2. 设置上游 (-u选项):在推送成功后,自动为本地的 feature-2 分支设置跟踪关系(Upstream),让其跟踪刚刚推送上去的远程 feature-2 分支(即 origin/feature-2)。

  3. 切换跟踪目标:本地 feature-2 分支原本跟踪的是另一个远程分支(例如 origin/old-feature),现在你想让它改为跟踪 origin/feature-2

  4. 重新建立联系:由于某些操作(如重新克隆仓库、远程分支被删除后重建),本地的跟踪关系丢失或失效,需要重新链接。

核心对比:git checkout -b vs git branch --set-upstream-to

特性git checkout -b feature-2 origin/feature-2git branch --set-upstream-to=origin/feature-2 feature-2
主要动作创建新分支并切换过去,同时设置跟踪。仅为已存在的本地分支设置或修改跟踪关系。
前提条件本地不能有名为 feature-2 的分支。本地必须已经有名为 feature-2 的分支。
结果你得到了一个新的本地分支,并且它跟踪远程分支。现有的本地分支现在开始跟踪远程分支。

        当前,本地代码与远程仓库已完全同步。你和团队成员可以继续在不同分支上协作开发。完成各自的功能开发后,请记得将代码合并到 master 分支,才算正式完成开发。由于你的队友率先完成开发,已开始进行合并操作:

此时远程仓库的状态如下:

        当你的同事将代码合并到 master 分支后,此时你已完成开发,也需要将自己的代码合并到 master 分支,操作步骤如下:

        切换到 master 分支,执行 pull 操作确保本地 master 分支内容是最新的。在合并操作前执行这个步骤是个良好的开发习惯。

        切换到 feature-1 分支并合并 master 分支的内容。这样可以在 feature-1 分支上处理可能出现的冲突,避免直接在 master 分支上解决冲突,这是一个良好的开发实践。

        由于 feature-1 分支已合并了新内容,建议及时推送以确保远程分支保持最新。此外,在实际开发中,master 分支的合并操作通常并非由开发者在本地执行,而是由其他成员或平台直接操作远程分支,因此保持远程分支最新尤为重要。

注意:

  • 若合并时出现冲突,请务必先提交(commit)更改后才能推送(push)。
  • 还有一点要注意,可能在merge的时候会弹出nano 文本编辑器的界面,这是Git 自动打开了它,让你为一次 合并提交 (merge commit) 输入说明信息。你输入信息后按 Ctrl+O (保存)和Ctrl + X(退出) 键就可以了。刚开始我很懵,九误操作了,可能导致下面的结果会有错误,体谅一下,我也是学习者,还望包涵)

切换到 master 分支,执行 feature-1 分支的合并操作

将 master 分支推送至远端

此时远程仓库的状态:

此时feature-1和feature-2分支已经完成使命,我们可以直接在远程仓库中删除dev分支:

多人协作的工作模式其实很容易上手,熟悉之后操作起来就会得心应手。

了解即可:开发人员提交代码后,首先触发自动化流水线(pint→P8998 Con→ONE.am)进行初步检查,通过后进入代码审查环节。审查人员对PR(Pull Request)进行评审,重点关注代码质量和功能保障性,评审通过后方可执行合并(merge)操作。


二、清理本地已删除的远程分支:Git 远程分支同步指南

        当我们在远程仓库(如 GitHub、Gitee 或 GitLab)中删除了某些分支后,本地执行 git branch -a 命令时,可能会发现这些已被远程删除的分支在本地仍然显示。这是因为本地 Git 仓库会缓存远程分支信息,不会自动同步远程分支的删除状态。

1、问题现象

远程分支删除后,本地执行 git branch -a 仍能看到已删除的远程分支:

git branch -a

即使执行 git pull 后,这些分支仍然存在,因为 git pull 主要获取远程更新而非清理分支。

2、解决方法

方法一:使用 git remote prune 命令(推荐)

1. 查看远程分支状态

        执行命令 git remote show origin 可以查看远程仓库地址、远程分支信息以及本地分支与远程分支的对应关系。

git remote show origin

输出结果会标识已失效的分支为 "stale",并提示使用 git remote prune 清理:

2. 清理本地缓存的分支

现在我们能看到远程仓库中已删除的分支,按照提示运行 git remote prune origin 命令即可。

git remote prune origin

此命令会清除本地存储的、远程仓库中已不存在的分支引用。

3. 验证清理结果
git branch -a

现在已删除的远程分支(如 feature-1 和 feature-2)不再显示。(但按理来说上面本地仓库还有一个feature-2的,可能我上面在nano那部分那里误操作了,这里就显示不出来了,体谅一下)

方法二:使用 git fetch 命令同步

git fetch --prune origin

或者简写:

git fetch -p

这个命令会在获取远程更新的同时,自动清理本地已失效的远程分支引用。

3、补充说明

  • 本地分支与远程分支:需要注意的是,上述操作仅清除远程分支的本地引用(如 origin/feature-1),不会删除本地创建的分支。如需删除本地分支,需使用 git branch -d <branch-name> 命令。

  • 自动化配置:可以设置 Git 在每次执行 fetch 时自动清理:

    git config --global fetch.prune true

通过以上方法,您可以保持本地仓库与远程仓库的分支状态同步,避免操作过时或已删除的分支。

注意:删除操作不可逆,请在执行前确认分支确实不再需要。

        这样就清理了远程仓库中已不存在的本地分支。关于删除本地分支的操作,我们在之前的博客已经学习过,大家可以自行练习掌握。

http://www.xdnf.cn/news/1409689.html

相关文章:

  • GPU-Driven Rendering inAssassin’s Creed Mirage
  • Android开发简介
  • LangChain框架深度解析:定位、架构、设计逻辑与优化方向
  • 计算机视觉与深度学习 | 双目立体特征提取与匹配算法综述——理论基础、OpenCV实践与MATLAB实现指南
  • leetcode_240 搜索二维矩阵 II
  • leetcode-hot-100(堆)
  • 分享一个实用的B站工具箱(支持音视频下载等功能)
  • Conda相关的用法
  • 业务逻辑漏洞类型及防范措施
  • 在实践中学Java(中)面向对象
  • 当 AI 开始 “筛选” 信息:算法偏见会加剧认知鸿沟吗?如何构建公平的 AI 生态?
  • 【算法笔记】算法归纳整理
  • (LeetCode 每日一题) 36. 有效的数独 (数组、哈希表)
  • 基于多模态大模型的PCB智能缺陷检测与分析
  • 人工智能学习:机器学习相关面试题(一)
  • 进程状态 —— Linux内核(Kernel)
  • 【动态规划】回文串问题
  • Wend看源码-marker(RAG工程-PDF文件解析)
  • R notes[2]
  • 鸿蒙Next文本组件全解析:输入框、富文本与属性字符串开发指南
  • Caffeine TimerWheel时间轮 深度解析:O(1)复杂度增删和触发时间事件
  • 李宏毅NLP-13-Vocoder
  • html添加水印
  • 2025年- H103-Lc211--3090. 每个字符最多出现两次的最长子字符串(双指针)--Java版
  • leetcode 268 丢失的数字
  • AG32 Nano开发板的烧录与调试工具(二)
  • 【开题答辩全过程】以 基于vue+springboot的校园疫情管理系统的设计与实现为例,包含答辩的问题和答案
  • 异步编程与面向对象知识总结
  • 家庭全光组网高温故障深度分析与散热重构全记录
  • 【图论】Graph.jl 核心函数