「插曲:Git」多人协作篇:远程分支创建与关联、多人协作冲突解决、Feature分支开发与合并、git remote prune清理失效分支


◆ 博主名称: 小此方-CSDN博客 大家好,欢迎来到小此方的博客。
⭐️网络系列个人专栏: 【插曲】Git
⭐️此方的GitHub: github_此方
⭐️ 我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)


文章目录

  • 概要&序論
  • [一、 协同开发的前期准备](#一、 协同开发的前期准备)
    • [1.1 模拟协同开发环境](#1.1 模拟协同开发环境)
    • [1.2 托管平台权限配置](#1.2 托管平台权限配置)
  • [二、 创建与绑定远程分支](#二、 创建与绑定远程分支)
    • [2.1 远程创建 dev 分支](#2.1 远程创建 dev 分支)
    • [2.2 本地拉取并关联远程分支](#2.2 本地拉取并关联远程分支)
  • [三、 同一分支下的协作开发与冲突解决](#三、 同一分支下的协作开发与冲突解决)
    • [3.1 顺利推送场景](#3.1 顺利推送场景)
    • [3.2 冲突产生与解决](#3.2 冲突产生与解决)
  • [四、 合并 dev 分支至 master](#四、 合并 dev 分支至 master)
  • [五、 同一分支多人协作模式总结](#五、 同一分支多人协作模式总结)
  • [六、 多需求 Feature 分支协作](#六、 多需求 Feature 分支协作)
    • [6.1 各自创建 feature 分支进行独立开发](#6.1 各自创建 feature 分支进行独立开发)
      • [6.1.1 开发者 A 创建 feature-1 分支并推送](#6.1.1 开发者 A 创建 feature-1 分支并推送)
      • [6.1.2 开发者 B 创建 feature-2 分支并推送](#6.1.2 开发者 B 创建 feature-2 分支并推送)
    • [6.2 接管与协助他人分支开发](#6.2 接管与协助他人分支开发)
      • [6.2.1 拉取并关联远程 feature-2 分支](#6.2.1 拉取并关联远程 feature-2 分支)
      • [6.2.2 继续开发并推送更新](#6.2.2 继续开发并推送更新)
      • [6.2.3 原开发者同步更新与关联设置](#6.2.3 原开发者同步更新与关联设置)
    • [6.3 合并 feature 分支至 master](#6.3 合并 feature 分支至 master)
      • [6.3.1 开发者 B 率先合并 feature-2 至 master](#6.3.1 开发者 B 率先合并 feature-2 至 master)
      • [6.3.2 开发者 A 合并 feature-1 至 master](#6.3.2 开发者 A 合并 feature-1 至 master)
    • [6.4 清理远程已失效的分支](#6.4 清理远程已失效的分支)
      • [6.4.1 远程分支删除后的本地残留问题](#6.4.1 远程分支删除后的本地残留问题)
      • [6.4.2 使用 git remote prune 清理无效分支](#6.4.2 使用 git remote prune 清理无效分支)

概要&序論

  Hello大家好,我是此方 。本文通过模拟真实团队开发环境,系统演示 Git 多人协作的完整流程:从托管平台权限配置、远程分支创建与本地关联入手,分析多人向同一分支推送代码时的正常流程与冲突解决方法。随后对比同分支协作与 Feature 分支协作模式,演示多个开发者如何独立开发、接管他人分支、同步远程更新并合并代码,最后使用 git remote prune 清理远程已删除但本地仍保留的失效分支,建立规范的团队协作工作流。

一、 协同开发的前期准备

在前期的学习中,我们已经掌握了 Git 的本地基本操作(如分支管理、版本回退、冲突解决等),并完成了远端仓库的建立、克隆、推送与拉取。接下来我们将进入团队协同开发的核心场景------实现多人协作开发。

在真正开始多人协作前,需要先搭建好协同开发的环境并分配权限。

1.1 模拟协同开发环境

为了模拟真实开发中两名开发者同时协作的情形,我们可以在本地不同环境(例如 Linux 环境与 Windows 环境)下分别克隆同一个项目仓库:

bash 复制代码
# 在环境一(Linux)下查看当前项目路径
pwd
/home/hyb/git_teaching

# 在环境二(Windows PowerShell)下克隆同一个远程仓库
git clone [https://gitee.com/hyb91/git_teaching.git](https://gitee.com/hyb91/git_teaching.git)

克隆成功后,两个独立的本地环境都拥有了完整的项目代码结构(如 .gitignore 、file.txt 、README.md 等文件)。

1.2 托管平台权限配置

在实际项目中,每个开发者都有独立的账号。若要让团队成员具备提交代码的权限,仓库创建者必须将成员添加至仓库的开发者列表中:

  1. 进入远程仓库页面,点击右上角的"管理"选项。
  2. 在左侧菜单中选择"仓库成员管理"下的"开发者"。
  3. 点击"添加仓库成员",选择"邀请用户"。
  4. 可以通过直接搜索用户名、复制链接邀请或二维码邀请等方式将成员加入,并赋予"开发者"权限。

完成上述设置后,多名开发者就具备了向该远程仓库推送代码的权限。

二、 创建与绑定远程分支

为了保证主分支(master )的稳定,在实际项目开发中,任何情况下都不建议直接在 master 分支上频繁修改代码。通常会基于主分支新建开发分支(如 dev 分支),用于日常功能迭代。

2.1 远程创建 dev 分支

首先在远程仓库(如 Gitee)页面中新建名为 dev 的远程分支。

2.2 本地拉取并关联远程分支

远程分支创建完毕后,各团队成员需要将最新的远程分支信息拉取到本地,并建立本地分支与远程分支的追踪绑定关系:

bash 复制代码
# 拉取远端最新分支信息
git pull

# 查看远端分支(需要加 -r 参数)
git branch -r

# 创建本地 dev 分支并与远程 origin/dev 分支建立关联
git checkout -b dev origin/dev

切换成功后,本地即建立了 dev 分支,且该分支已与远程的 origin/dev 分支自动完成绑定,方便后续直接进行推送与拉取。

三、 同一分支下的协作开发与冲突解决

当多名开发者同时在 dev 分支上进行开发并推送代码时,可能遇到顺利推送或产生冲突的不同情况。

3.1 顺利推送场景

假设开发者 A 在本地 dev 分支上修改了文件并率先推送到远端:

bash 复制代码
# 修改文件内容
vim file.txt

# 提交至本地仓库
git add file.txt
git commit -m "first function"

# 推送至远程 dev 分支
git push origin dev

由于远程 dev 分支此时没有其他人提交的新代码,开发者 A 的推送将顺利成功。

3.2 冲突产生与解决

此时,开发者 B 也在本地 dev 分支上修改了同一文件(如 file.txt),并在本地完成了提交,尝试推送到远端:

bash 复制代码
git push origin dev

此时终端会提示推送失败(rejected),原因在于远程分支已经包含了开发者 B 本地没有的新提交,版本发生了偏离。

解决办法如下:

  1. 拉取远端最新代码 :执行 git pull 命令,将远程 dev 分支的最新提交抓取到本地并尝试自动合并。

    bash 复制代码
    git pull
  2. 手动解决冲突 :如果自动合并失败,Git 会在文件中标注冲突区域(包含 <<<<<<< HEAD、=======、>>>>>>> 等标记)。使用编辑器打开冲突文件(如 file.txt),保留正确的代码并删除冲突标记。

  3. 重新提交与推送:冲突解决完成后,重新提交到本地仓库,并推送到远端。

    bash 复制代码
    git add file.txt
    git commit -m "merge dev"
    git push origin dev

推送成功后,远端仓库即包含了合并后的最新代码。开发者 A 此时只需在本地执行 git pull,即可同步获取开发者 B 合并后的最新代码。

四、 合并 dev 分支至 master

当 dev 分支上的阶段性功能开发完毕且测试无误后,需要将 dev 分支的代码合并回 master 主分支。

标准的操作流程如下:

  1. 更新本地 master 分支:

    bash 复制代码
    git checkout master
    git pull
  2. 切换至 dev 分支合并 master 分支(防止直接在 master 上解冲突):

    bash 复制代码
    git checkout dev
    git merge master
  3. 将 dev 分支合并至 master 分支:

    bash 复制代码
    git checkout master
    git merge dev
    git push origin master

合并并推送成功后,远程 master 分支即更新为最新代码。若该阶段的 dev 分支使命已经完成,可以直接在远程仓库页面将该 dev 分支进行删除清理。

五、 同一分支多人协作模式总结

总结而言,在同一分支下进行多人协同开发的标准流程如下:

  • 首先尝试推送 :使用 git push origin 推送自己的修改;
  • 推送失败则拉取 :若推送失败,说明远程分支比本地更新,需要先使用 git pull 试图合并;
  • 存在冲突则解决 :若 git pull 提示合并冲突,则手动解决冲突并在本地提交;
  • 再次推送 :冲突解决并提交后,重新使用 git push origin 推送即可成功;
  • 迭代完成合并主干 :功能开发完毕后,将分支合并进 master 主分支,最后清理已失效的分支。

六、 多需求 Feature 分支协作

在实际项目开发中,如果同时有多个需求需要多名开发者并行开发,通常不会挤在同一个分支上进行,而是为一个需求或功能点单独创建一个 feature 分支。

除了在代码托管平台上直接创建远程分支外,我们在本地创建的分支也可以通过推送的方式直接同步到远端。

6.1 各自创建 feature 分支进行独立开发

假设现在有两个需求需要同时开发,两名开发者可以分别在本地新建各自的特性分支并进行推送。

6.1.1 开发者 A 创建 feature-1 分支并推送

开发者 A 在本地创建 feature-1 分支,新增需求文件并推送到远程仓库:

bash 复制代码
# 新增本地分支 feature-1 并切换
git checkout -b feature-1

# 新增需求内容------创建 function1 文件
vim function1
cat function1

# 将 feature-1 分支推送到远端
git add function1
git commit -m "add function1"
git push origin feature-1

6.1.2 开发者 B 创建 feature-2 分支并推送

与此同时,开发者 B 在自己的机器上创建 feature-2 分支并完成开发推送:

bash 复制代码
# 创建并切换到 feature-2 分支
git checkout -b feature-2

# 在分支下新增需求文档 function2
vim function2
cat function2

# 将 feature-2 分支推送到远端
git add function2
git commit -m "add function2"
git push origin feature-2

此时,在各自的本地仓库中,两名开发者互看不到对方新建的文件。同时推送各自的 feature 分支到远端时不会产生任何冲突,实现了互不干扰的并行开发。

6.2 接管与协助他人分支开发

在协同开发过程中,如果某位开发者因故无法继续开发(如请假或生病),需要其他成员接手其分支继续开发,可以通过以下步骤完成分支接管。

6.2.1 拉取并关联远程 feature-2 分支

接手者需要先获取远程仓库的最新分支信息,并切换到对应的远程分支上:

bash 复制代码
# 必须先拉取远端仓库内容
git pull

# 查看远端分支,确认已被拉取到本地列表
git branch -a

# 切换到 feature-2 分支上,并与远程 feature-2 分支建立关联
git checkout -b feature-2 origin/feature-2

# 查看当前目录文件,已包含对方创建的 function2 文件
ls

建立关联后,接手者便可以在本地看到对方之前的代码并继续开发。

6.2.2 继续开发并推送更新

接手者补充开发内容并重新推送到远程 feature-2 分支:

bash 复制代码
# 继续开发修改
vim function2
cat function2

# 提交并推送内容
git add function2
git commit -m "modify function2"
git push origin feature-2

6.2.3 原开发者同步更新与关联设置

当原开发者回归并准备继续开发时,需要先拉取最新的修改。如果直接执行 git pull 提示缺少追踪信息(tracking information),说明本地分支与远程分支未建立绑定关系。

根据终端提示,执行以下命令建立链接:

bash 复制代码
# 设置本地 feature-2 与远程 origin/feature-2 的关联
git branch --set-upstream-to=origin/feature-2 feature-2

# 重新拉取远端更新
git pull

拉取成功后,原开发者的本地代码即可与远端保持完全一致,可以继续进行后续的开发工作。

6.3 合并 feature 分支至 master

各个需求开发测试完毕后,需要依次将分支代码合并到 master 主分支中。

6.3.1 开发者 B 率先合并 feature-2 至 master

率先开发完成的开发者先将代码合并回主干:

bash 复制代码
# 1. 切换至 master,拉取最新代码
git checkout master
git pull

# 2. 切换至 feature-2 分支,合并 master 分支
git checkout feature-2
git merge master

# 3. 切换至 master,合并 feature-2 并推送至远端
git checkout master
git merge feature-2
git push origin master

推送成功后,远程 master 分支即包含了 feature-2 的代码。

6.3.2 开发者 A 合并 feature-1 至 master

随后开发者 A 也开发完毕,按照同样的流程将 feature-1 合并回主干:

bash 复制代码
# 1. 切换至 master 分支拉取最新内容(此时会拉到刚才合并的 feature-2 代码)
git checkout master
git pull

# 2. 切换至 feature-1 分支,合并最新的 master 分支(如有冲突在 feature-1 处理)
git checkout feature-1
git merge master

# 3. 切换至 master,合并 feature-1 并推送到远端
git checkout master
git merge feature-1
git push origin master

此时远程 master 分支同时包含了 function1 与 function2 的完整代码。

6.4 清理远程已失效的分支

当所有 feature 分支开发完毕并成功合并到 master 后,可以在远程仓库页面将已经废弃的 feature-1 和 feature-2 分支进行删除。

6.4.1 远程分支删除后的本地残留问题

虽然远程仓库中的分支已被删除,但在本地执行 git branch -a 时,终端依然能够看到 remotes/origin/feature-1 等已失效的远程分支缓存:

bash 复制代码
git branch -a

6.4.2 使用 git remote prune 清理无效分支

为了核查远端分支状态,可以运行以下命令查看远程仓库的详细绑定信息:

bash 复制代码
git remote show origin

在输出结果中,Git 会明确提示部分分支在远程已不存在(stale),并建议使用 git remote prune 进行清理。

执行以下命令清理本地关于远程失效分支的缓存记录:

bash 复制代码
git remote prune origin

执行后,终端会显示 [pruned] origin/feature-1 等清理提示。再次运行 git branch -a 检查,即可发现本地记录的失效远程分支已被彻底清除。本地分支的删除则可根据先前学习的 git branch -d 命令按需手动清理。


好的本期内容就到这里,如果对你有帮助,还不要忘记点赞三联支持。我是此方,我们下期再见。bye!

相关推荐
可乐ea3 小时前
Git 基础设施重建:智能体规模开发下的读写解耦
大数据·git·elasticsearch·分布式存储·git基础设施·智能体规模开发·读写解耦
信可维5 小时前
AI 说「改完了」怎么确认真改完了:git diff + 测试 + 一张验收表的 3 步复核
人工智能·git
Sun子矜7 小时前
Git+Gitee 新手教程精简归纳版
git·gitee
亿道电子Emdoor7 小时前
【Perforce】Klocwork-kwgcheck图形化界面无法打开如何解决
git·python·github
小此方1 天前
「插曲:Git」企业规范篇:DevOps开发模型、Git Flow五类分支设计与测试/预发布/生产环境Bug修复及Hotfix紧急发布流程
git·bug·devops
溪语流沙1 天前
【Web全栈进阶】JWT无状态认证:签发、校验、刷新
前端·git·python·github
OsDepK1 天前
osgit纯图形化git版本管理工具,多人开发团队协作工具,支持Mac与Windows
git
Madison-No72 天前
Git版本控制工具(一)
git
小小小米粒2 天前
重置本地git
大数据·git·elasticsearch