跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Git 多人协作开发流程与最佳实践

Git 多人协作开发的完整流程。内容包括模拟多开发者环境、基础协作(同一分支下的协同、冲突解决)、进阶协作(多分支并行开发、跨分支协助)、远程分支管理以及合并策略。重点讲解了分支创建、拉取推送、冲突处理及清理过时引用的命令操作,旨在帮助团队高效进行并行开发并保持代码库稳定。

魔法巫师发布于 2026/3/28更新于 2026/7/1546 浏览
Git 多人协作开发流程与最佳实践

准备工作:模拟多人协作环境

为了演示多人协作,我们需要模拟两个开发者协同工作的场景。

环境设置

  1. 开发者 A(Linux 环境):已经 clone 了远程仓库
  2. 开发者 B(Windows 环境):模拟另一位开发者,同样 clone 相同的仓库
# 开发者 A(Linux)的当前目录
$ pwd
/home/HY/dir/test

Windows 环境克隆仓库

克隆仓库界面

克隆仓库操作

添加项目成员

要进行协同开发,必须将其他开发者添加为项目成员并分配相应权限。

添加成员

权限分配

至此,我们已经模拟了两个开发者(Linux 和 Windows)共同协作的场景。

基础协作:同一分支下的协同开发

1、创建远程开发分支

在实际项目中,不允许直接在 master 分支上进行开发。我们需要创建专门的开发分支。

在 Gitee 创建 dev 分支

创建分支

分支列表

分支详情

2、拉取远程分支到本地

两位开发者都需要将远程 dev 分支拉取到本地:

开发者 A(Linux)操作
# 拉取远程更新
$ git pull
From https://gitee.com/null_mian/test
* [new branch]      dev -> origin/dev
Already up-to-date.

# 查看远程分支
$ git branch -r
origin/HEAD -> origin/master
origin/dev
origin/master

# 创建本地 dev 分支并关联远程 dev 分支
$ git checkout -b dev origin/dev
Branch dev set up to track remote branch dev from origin.
Switched to a new branch 'dev'

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

注意:git branch只能查看本地分支,查看远程分支需加上 -r 选项(前提是要先 pull)

开发者 B(Windows)操作

Windows 拉取分支

3、协作开发流程

步骤 1:开发者 A 进行开发并推送
# 确认当前分支
$ git branch
* dev
  master

# 修改文件
$ vim file.txt
$ cat file.txt
happy cooperating with you!!!

# 提交并推送
$ git add file.txt
$ git commit -m "Add a greeting line"
[dev 5830349] Add a greeting line
1 file changed, 1 insertion(+)
create mode 100644 file.txt

# 推送到远程 dev 分支
$ git push origin dev
...
To https://gitee.com/null_mian/test.git
4331117..5830349  dev -> dev

推送成功

远程状态

步骤 2:开发者 B 尝试推送(遇到冲突)

推送冲突

步骤 3:解决冲突

先用 git pull 把最新的提交从 origin/dev 拉取下来。

拉取合并

然后,在本地进行合并,并解决冲突,再推送。

解决冲突

此时,我们看到远端的 Gitee 已经能看到我们的新提交了。

远端更新

由此,两名开发者已经可以进行协同开发了,不断的 git pull/add/commit/push,遇到了冲突,就使用我们之前讲的冲突处理解决冲突。

对于你来说,想要看到小伙伴的代码,只需要 pull一下即可,例如:

步骤 4:开发者 A 获取更新
# 查看当前文件
$ cat file.txt
happy cooperating with you!!!

# 拉取最新代码
$ git pull
...
From gitee.com:null_mian/test
a7545aa..5e9eeb7  dev -> origin/dev
Updating a7545aa..5e9eeb7 Fast-forward
file.txt | 1 +
1 file changed, 1 insertion(+)

# 查看合并后的文件
$ cat file.txt
happy cooperating with you!!!
me too!!!

最后不要忘记,虽然我们是在分支上进行多人协作开发,但最终的目的是要将开发后的代码合并到 master 上去,让我们的项目运行最新的代码。接下来我们就需要做这件事情了。

# 1、切换至 master 分支,pull 一下,保证本地的 master 是最新内容
# 合并前这么做是一个好习惯
$ git checkout master
Switched to branch 'master'
$ git pull
Already up-to-date.

# 2、切换至 dev 分支,合并 master 分支
# 这么做是因为如果有冲突,可以在 dev 分支上解决,保证 master 分支的稳定性
# 这么做是一个好习惯
$ git checkout dev
Switched to branch 'dev'
$ git merge master
Already up-to-date.

# 3、切换至 master 分支,合并 dev 分支
$ git checkout master
Switched to branch 'master'
$ git merge dev
Updating 4331117..5e9eeb7 Fast-forward
file.txt | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 file.txt
$ cat file.txt
happy cooperating with you!!!
me too!!!

# 4、将 master 分支推送到远端
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 7 commits.
# (use "git push" to publish your local commits)
# nothing to commit, working directory clean
$ git push origin master
...
To [email protected]:null_mian/test.git
4331117..5e9eeb7  master -> master
$ git status
# On branch master
nothing to commit, working directory clean

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

Master 更新

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

删除分支

确认删除

基础协作工作模式总结

  1. 尝试推送:使用 git push origin branch-name 推送自己的修改
  2. 处理推送失败:如果失败,说明远程分支比本地更新,需先 git pull 合并
  3. 解决冲突:如有冲突,在本地解决冲突并提交
  4. 再次推送:冲突解决后,再次使用 git push origin branch-name 推送
  5. 功能合并:开发完毕,将分支合并进 master
  6. 清理分支:最后删除已合并的分支

进阶协作:多分支并行开发

在实际项目中,通常会为每个需求或功能点创建独立的分支,实现并行开发。

场景设定

  • 功能 1:由开发者 A 负责
  • 功能 2:由开发者 B 负责

1、创建功能分支

开发者 A 创建 feature-1 分支
# 新增本地分支 feature-1 并切换
$ git branch
* master
$ git checkout -b feature-1
Switched to a new branch 'feature-1'

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

# 将 feature-1 分支推送到远端
$ git add function1
$ git commit -m "add function1"
[feature-1 7390347] add function1
1 files changed, 1 insertion(+)
$ git push origin feature-1
...
remote: Create a pull request for 'feature-1' on Gitee by visiting:
remote: https://gitee.com/null_mian/test/pull/new/null_mian:feature-1...null_mian:master
To [email protected]:null_mian/test.git
* [new branch]      feature-1 -> feature-1
开发者 B 创建 feature-2 分支

B 创建分支

此时,在本地,你看不见他新建的文档,他看不见你新建的文档。并且推送各自的分支时,并没有任何冲突,你俩互不影响,用起来很舒服!

2、查看 Gitee 状态

Gitee 状态

feature-1 分支内容

Feature1 内容

feature-2 分支内容

Feature2 内容

3、跨分支协作(帮同事继续开发)

当同事因故无法继续开发时,可以切换到对方的分支帮助开发。

开发者 A 协助开发者 B
# 必须先拉取远端仓库内容
$ git pull
··· From gitee.com:null_mian/test
7390347..66735e3  feature-1 -> origin/feature-1
* [new branch]      feature-2 -> origin/feature-2
···

# 可以看到远程已经有了 feature-2
$ git branch -a
* feature-1
  master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/feature-1
remotes/origin/feature-2
remotes/origin/master

# 切换到 feature-2 分支上,可以和远程的 feature-2 分支关联起来,
# 否则将来只使用 git push 推送内容会失败
$ 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'

# 查看文件
$ ls
function2 README.en.md README.md

# 继续开发
$ vim function2
$ cat function2
Done! Help done!

# 提交并推送
$ git add function2
$ git commit -m "modify function2"
[feature-2 061df75] modify function2
1 file changed, 2 insertions(+), 1 deletion(-)
$ git push origin feature-2
...
To [email protected]:null_mian/test.git
d246966..061df75  feature-2 -> feature-2

A 推送

开发者 B 获取更新

B 获取

pull 是因为没有指定本地 feature-2 分支与远程 origin/feature-2 分支的链接,设置 feature-2 和 origin/feature-2 的链接即可。

链接设置

4、功能开发完毕,合并到 master

开发者 B 先合并 feature-2

B 合并

合并结果

开发者 A 合并 feature-1
# 切换至 master 分支,pull 一下,保证本地的 master 是最新内容。
# 合并前这么做是一个好习惯
$ git checkout master
Switched to branch 'master'
$ git pull
...
From gitee.com:null_mian/test
eb21de3..4b96a42  master -> origin/master
Updating eb21de3..4b96a42 Fast-forward
function2 | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 function2

# 切换至 feature-1 分支,合并 master 分支
# 这么做是因为如果有冲突,可以在 feature-1 分支上进行处理,而不是在 master 分支上解决冲突
# 这么做是一个好习惯
$ git checkout feature-1
Switched to branch 'feature-1'
$ git merge master
Merge made by the 'recursive' strategy.
function2 | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 function2

# 查看合共结果
$ ls
a.so b.ini file.txt function1 function2 README.en.md README.md

# 1、由于 feature-1 分支已经 merge 进来了新内容,为了保证远程分支最新,所以最好 push 一下。
# 2、要 push 的另一个原因是因为在实际的开发中,master 的 merge 操作一般不是由我们自己在本地进行操作,
# 其他人员或某些平台 merge 时,操作的肯定时远程分支,所以就要保证远程分支的最新。
# 3、如果 merge 出现冲突,不要忘记需要 commit 才可以 push!
$ git status
# On branch master
nothing to commit, working directory clean

# 推送 feature-1 更新到远程
$ git push origin feature-1
...
To [email protected]:null_mian/test.git
66735e3..9effc8e  feature-1 -> feature-1

# 切换至 master 分支,合并 feature-1 分支
$ git checkout master
Switched to branch 'master'
$ git merge feature-1
Updating 4b96a42..9effc8e Fast-forward
function1 | 1 +
1 file changed, 1 insertion(+)
create mode 100644 function1

# 将 master 分支推送至远端
$ git status
# On branch master
nothing to commit, working directory clean
$ git push origin master
...
To [email protected]:null_mian/test.git
4b96a42..9effc8e  master -> master
$ git status
# On branch master
nothing to commit, working directory clean

最终合并

5、清理功能分支

此时,feature-1、feature-2 分支对于我们来说就没用了,那么我们可以直接在远程仓库中将其删除掉。

清理分支

注意:在实际开发中,通常会在 dev 分支基础上创建 feature 分支,而不是直接在 master 上创建。此处为演示方便,简化了流程。

远程分支管理

清理已删除的远程分支引用

当远程分支被删除后,本地仍能看到这些分支的引用。

$ git pull
Already up-to-date.

# 查看所有分支(包含已删除的远程分支)
$ git branch -a
feature-1
feature-2
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/feature-1
remotes/origin/feature-2
remotes/origin/master
查看远程仓库状态

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

$ git remote show origin
* remote origin
Fetch URL: [email protected]:null_mian/test.git
Push URL: [email protected]:null_mian/test.git
HEAD branch (remote HEAD is ambiguous, may be one of the following):
  feature-1
  master
Remote branches:
  feature-1 tracked
  feature-2 tracked
  master tracked
refs/remotes/origin/dev stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
  feature-2 merges with remote feature-2
  master merges with remote master
Local refs configured for 'git push':
  feature-1 pushes to feature-1 (up to date)
  feature-2 pushes to feature-2 (up to date)
  master pushes to master (up to date)
清理过时的远程分支引用

使用命令 git remote prune origin,查看那些远程仓库已经不存在的分支。

$ git remote prune origin
Pruning origin URL: [email protected]:null_mian/test.git
* [pruned] origin/dev
$ git branch -a
feature-1
feature-2
* master
remotes/origin/HEAD -> origin/master
remotes/origin/feature-1
remotes/origin/feature-2
remotes/origin/master

这样就删除了那些远程仓库不存在的分支。对于本地仓库的删除,之前的课程已经学过了,大家可以自行操作。

总结:多人协作最佳实践

工作流程要点

分支策略:
  • master:稳定版本,禁止直接开发
  • dev:集成测试分支
  • feature/*:功能开发分支
协作规范:
  • 每次开发前先拉取最新代码
  • 提交时填写清晰的提交信息
  • 及时解决冲突,避免积累
合并流程:
  • 功能开发完成后,在功能分支合并最新 master
  • 解决可能出现的冲突
  • 发起 Pull Request 进行代码审查
  • 审查通过后合并到目标分支
分支管理:
  • 及时删除已合并的分支
  • 定期清理过时的分支引用
  • 使用有意义的命名规范

常用命令回顾

操作命令说明
查看分支git branch -a查看所有分支
创建分支git checkout -b <name>创建并切换分支
关联远程分支git checkout -b <local> origin/<remote>创建本地分支并关联远程
推送分支git push origin <branch>推送本地分支到远程
拉取更新git pull拉取远程更新并合并
清理分支引用git remote prune origin清理已删除的远程分支引用
删除本地分支git branch -d <branch>删除已合并的本地分支

通过掌握这些协作技巧,团队可以高效地进行并行开发,同时保持代码库的整洁和稳定。

目录

  1. 准备工作:模拟多人协作环境
  2. 环境设置
  3. 开发者 A(Linux)的当前目录
  4. Windows 环境克隆仓库
  5. 添加项目成员
  6. 基础协作:同一分支下的协同开发
  7. 1、创建远程开发分支
  8. 在 Gitee 创建 dev 分支
  9. 2、拉取远程分支到本地
  10. 开发者 A(Linux)操作
  11. 拉取远程更新
  12. 查看远程分支
  13. 创建本地 dev 分支并关联远程 dev 分支
  14. 开发者 B(Windows)操作
  15. 3、协作开发流程
  16. 步骤 1:开发者 A 进行开发并推送
  17. 确认当前分支
  18. 修改文件
  19. 提交并推送
  20. 推送到远程 dev 分支
  21. 步骤 2:开发者 B 尝试推送(遇到冲突)
  22. 步骤 3:解决冲突
  23. 步骤 4:开发者 A 获取更新
  24. 查看当前文件
  25. 拉取最新代码
  26. 查看合并后的文件
  27. 1、切换至 master 分支,pull 一下,保证本地的 master 是最新内容
  28. 合并前这么做是一个好习惯
  29. 2、切换至 dev 分支,合并 master 分支
  30. 这么做是因为如果有冲突,可以在 dev 分支上解决,保证 master 分支的稳定性
  31. 这么做是一个好习惯
  32. 3、切换至 master 分支,合并 dev 分支
  33. 4、将 master 分支推送到远端
  34. On branch master
  35. Your branch is ahead of 'origin/master' by 7 commits.
  36. (use "git push" to publish your local commits)
  37. nothing to commit, working directory clean
  38. On branch master
  39. 基础协作工作模式总结
  40. 进阶协作:多分支并行开发
  41. 场景设定
  42. 1、创建功能分支
  43. 开发者 A 创建 feature-1 分支
  44. 新增本地分支 feature-1 并切换
  45. 新增需求内容 - 创建 function1 文件
  46. 将 feature-1 分支推送到远端
  47. 开发者 B 创建 feature-2 分支
  48. 2、查看 Gitee 状态
  49. feature-1 分支内容
  50. feature-2 分支内容
  51. 3、跨分支协作(帮同事继续开发)
  52. 开发者 A 协助开发者 B
  53. 必须先拉取远端仓库内容
  54. 可以看到远程已经有了 feature-2
  55. 切换到 feature-2 分支上,可以和远程的 feature-2 分支关联起来,
  56. 否则将来只使用 git push 推送内容会失败
  57. 查看文件
  58. 继续开发
  59. 提交并推送
  60. 开发者 B 获取更新
  61. 4、功能开发完毕,合并到 master
  62. 开发者 B 先合并 feature-2
  63. 开发者 A 合并 feature-1
  64. 切换至 master 分支,pull 一下,保证本地的 master 是最新内容。
  65. 合并前这么做是一个好习惯
  66. 切换至 feature-1 分支,合并 master 分支
  67. 这么做是因为如果有冲突,可以在 feature-1 分支上进行处理,而不是在 master 分支上解决冲突
  68. 这么做是一个好习惯
  69. 查看合共结果
  70. 1、由于 feature-1 分支已经 merge 进来了新内容,为了保证远程分支最新,所以最好 push 一下。
  71. 2、要 push 的另一个原因是因为在实际的开发中,master 的 merge 操作一般不是由我们自己在本地进行操作,
  72. 其他人员或某些平台 merge 时,操作的肯定时远程分支,所以就要保证远程分支的最新。
  73. 3、如果 merge 出现冲突,不要忘记需要 commit 才可以 push!
  74. On branch master
  75. 推送 feature-1 更新到远程
  76. 切换至 master 分支,合并 feature-1 分支
  77. 将 master 分支推送至远端
  78. On branch master
  79. On branch master
  80. 5、清理功能分支
  81. 远程分支管理
  82. 清理已删除的远程分支引用
  83. 查看所有分支(包含已删除的远程分支)
  84. 查看远程仓库状态
  85. 清理过时的远程分支引用
  86. 总结:多人协作最佳实践
  87. 工作流程要点
  88. 分支策略:
  89. 协作规范:
  90. 合并流程:
  91. 分支管理:
  92. 常用命令回顾
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AI、AGI、AIGC、NLP、LLM 与 ChatGPT 核心概念解析
  • 零基础 AI 入门指南:从环境搭建到代码调用
  • 国内升级 GitHub Copilot 专业版支付方案
  • ELK 日志分析平台搭建与配置实战
  • 低代码平台后端引擎:元数据驱动、插件化内核与 Java 扩展
  • Win10 常用桌面时钟工具推荐:Digital Clock 4、Fliqlo、Rainmeter 等
  • 即时通讯系统核心模块:从传输到存储的全链路设计
  • Spring Boot @ConditionalOnMissingBean 误判问题深度解析
  • Dev-C++ 下载与安装详细教程
  • 飞算 JavaAI 编程助手在 IDEA 中的安装教程:本地、离线及在线方法
  • 图寻路算法详解:基于深度优先搜索 (DFS) 实现
  • C++ 二叉搜索树(BST)核心实现与原理详解
  • OpenClaw 深度解析:构建从认知到行动的 AI 智能体框架
  • 前端国际化最佳实践:从硬编码到专业方案
  • Ubuntu 22.04 升级 Node.js 版本方法
  • 强化学习:PPO 算法的 Python 实现与解析
  • Python 列表:创建、操作与切片详解
  • 基于 Ant Design Vue 4.x 的然然管理系统前端架构实践
  • 规则引擎详解:概念、作用、场景、痛点与主流开源方案对比
  • VSCode 禁用 Copilot 代码自动补全

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online