跳到主要内容
Git 多人协作开发流程与最佳实践 | 极客日志
Shell / Bash
Git 多人协作开发流程与最佳实践 综述由AI生成 Git 多人协作开发的完整流程。内容包括模拟多开发者环境、基础协作(同一分支下的协同、冲突解决)、进阶协作(多分支并行开发、跨分支协助)、远程分支管理以及合并策略。重点讲解了分支创建、拉取推送、冲突处理及清理过时引用的命令操作,旨在帮助团队高效进行并行开发并保持代码库稳定。
魔法巫师 发布于 2026/3/28 更新于 2026/5/25 28 浏览准备工作:模拟多人协作环境
为了演示多人协作,我们需要模拟两个开发者协同工作的场景。
环境设置
开发者 A(Linux 环境) :已经 clone 了远程仓库
开发者 B(Windows 环境) :模拟另一位开发者,同样 clone 相同的仓库
$ pwd
/home/HY/dir/test
Windows 环境克隆仓库
添加项目成员
要进行协同开发,必须将其他开发者添加为项目成员并分配相应权限。
至此,我们已经模拟了两个开发者(Linux 和 Windows)共同协作的场景。
基础协作:同一分支下的协同开发
1、创建远程开发分支
在实际项目中,不允许 直接在 master 分支上进行开发。我们需要创建专门的开发分支。
在 Gitee 创建 dev 分支
2、拉取远程分支到本地
开发者 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
$ 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)操作
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
$ 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 上去,让我们的项目运行最新的代码。接下来我们就需要做这件事情了。
$ git checkout master
Switched to branch 'master'
$ git pull
Already up-to-date.
$ git checkout dev
Switched to branch 'dev'
$ git merge master
Already up-to-date.
$ 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!!!
$ git status
$ git push origin master
...
To [email protected] :null_mian/test.git
4331117..5e9eeb7 master -> master
$ git status
nothing to commit, working directory clean
此时,查看远端仓库,master 分支已经是最新代码了。
此时,dev 分支对于我们来说就没用了,那么 dev 分支就可以删除了。我们可以直接在远程仓库中将 dev 分支删除。
基础协作工作模式总结
尝试推送 :使用 git push origin branch-name 推送自己的修改
处理推送失败 :如果失败,说明远程分支比本地更新,需先 git pull 合并
解决冲突 :如有冲突,在本地解决冲突并提交
再次推送 :冲突解决后,再次使用 git push origin branch-name 推送
功能合并 :开发完毕,将分支合并进 master
清理分支 :最后删除已合并的分支
进阶协作:多分支并行开发 在实际项目中,通常会为每个需求或功能点创建独立的分支,实现并行开发。
场景设定
功能 1 :由开发者 A 负责
功能 2 :由开发者 B 负责
1、创建功能分支
开发者 A 创建 feature-1 分支
$ git branch
* master
$ git checkout -b feature-1
Switched to a new branch 'feature-1'
$ vim function1
$ cat function1
Done!
$ 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 分支 此时,在本地,你看不见他新建的文档,他看不见你新建的文档。并且推送各自的分支时,并没有任何冲突,你俩互不影响,用起来很舒服!
2、查看 Gitee 状态
feature-1 分支内容
feature-2 分支内容
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
···
$ 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
$ 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
开发者 B 获取更新 pull 是因为没有指定本地 feature-2 分支与远程 origin/feature-2 分支的链接,设置 feature-2 和 origin/feature-2 的链接即可。
4、功能开发完毕,合并到 master
开发者 B 先合并 feature-2
开发者 A 合并 feature-1
$ 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
$ 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
$ git status
nothing to commit, working directory clean
$ git push origin feature-1
...
To [email protected] :null_mian/test.git
66735e3..9effc8e feature-1 -> 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
$ git status
nothing to commit, working directory clean
$ git push origin master
...
To [email protected] :null_mian/test.git
4b96a42..9effc8e master -> master
$ git status
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>删除已合并的本地分支
通过掌握这些协作技巧,团队可以高效地进行并行开发,同时保持代码库的整洁和稳定。
相关免费在线工具 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