Git多人协作——从配置到分支管理实例详解
Git多人协作——从配置到分支管理实例详解
Git 概述
Git 是一个分布式版本控制系统,设计用于处理大型项目的源代码管理。在多人的开发环境中,Git 提供了强大的协作能力,允许团队成员在本地仓库中进行独立开发,同时通过远程仓库实现代码的共享和合并。Git 协作旨在帮助开发者高效地管理版本、避免冲突、确保代码质量,并通过审查流程优化团队合作。
功能分支工作流(Feature Branch Workflow)介绍
功能分支工作流(Feature Branch Workflow)是 Git 协作中一种常用的工作流模式,适用于多人协作的开发环境。
该工作流的核心思想是:每个新功能、Bug 修复或任务都应在独立的功能分支 feature上进行开发,开发完成后再将该分支合并回主分支 master。
这种方式的主要优势是它可以将不同的开发任务隔离开,避免它们相互干扰,并减少冲突的发生。
Feature Branch Workflow 的具体流程
- 开发者从主分支 master创建一个新的功能分支 feature
- 在功能分支 feature上进行开发工作
- 完成开发任务后,开发者将功能分支 feature合并回主分支 master
- 合并完成后,可将功能分支 feature删除以保持代码库清晰
Git配置和基础命令
安装Git
Windows
官网下载:Git下载
验证安装:在准备创建新仓库的文件夹右键鼠标,点击 "Open Git Base here" 或在命令行输入
git --version
,若能看到版本号说明安装成功Ubuntu(Linux)
终端输入以下命令进行安装:
sudo apt update sudo apt install git
验证安装:终端输入
git --version
,若能看到版本号说明安装成功
配置Git
设置用户名和邮箱地址
git config --global user.name '用户名' git config --global user.email '邮箱地址'
检查配置
git config --global --list
SSH配置
生成 SSH 密钥对
ssh-keygen -t rsa
获取 SSH 公钥
cat ~/.ssh/id_rsa.pub
复制返回的内容
在 Gitee 里添加公钥
Gitee -> 个人图标 -> 账号设置 -> SSH密钥对
Git的基础命令
Windows 打开Git Bash,Ubuntu 打开终端
创建一个新的 Git仓库
git init
克隆一个现有的 Git仓库
git clone git@gitee.com:yugeduck/git-test.git
查看仓库状态
git status
这将显示哪些文件已修改、哪些文件是新的未追踪文件等
添加文件到暂存区
- 某个文件:
git add <文件名>
- 全部文件:
git add .
提交更改
git commit -m "描述信息"
“描述信息”用于描述此次提交进行了什么更改
查看提交历史
git log
分支相关
- 将分支推送到远程仓库
git push
- 更新分支信息(确保处于最新版本)
git pull
- 创建并切换分支
git checkout -b new-branch
- 切换到现有分支
git checkout existing-branch
- 合并分支
git merge branch-name
- 查看当前分支
git branch
- 查看远程仓库中的所有分支
git branch -r
- 显示本地和远端的所有分支
git branch -a
- 显示本地分支与远端分支的追踪关系
git branch -vv
示例
本文将会用两个例子分别演示不同的创建分支、合并分支以及删除分支的方式
创建分支
- 在远端仓库直接创建分支,然后在本地连接远端的分支
- 先在本地创建分支,后在远端仓库创建一个与本地分支对应的分支
合并分支
- 在本地 master 分支上合并后再 push 到远端 master 分支
- 提交 pull request,通过代码审验后合并到 master 分支(更推荐)
删除分支
- 在远端和本地分别删除 feature 分支
- 先在本地删除 feature 分支,后推送到远端
示例一
场景:成员A在创建分支后才克隆远端仓库,后在分支 feature 下开发:在 README 中增加一行 “This is A”
(一)创建分支
这里使用创建分支的第一种方式
在 gitee 远端仓库里直接创建
(二)克隆一个 Git仓库
- 打开 Git Bash,输入:
其中 “git@gitee.com:yugeduck/git-test.git” 是目标仓库的地址git clone git@gitee.com:yugeduck/git-test.git
- 进入仓库所在文件夹
cd git-test
(三)查看分支信息
git pull
两个作用:
- 拉取远程分支中的最新提交,并自动合并
- 更新远程仓库的分支信息,确保本地分支处于最新版本
(四)成员A在本地 feature 分支上开发,并推送到远端 feature 分支
创建一个 feature 分支并切换到 feature 分支上,并与远端 feature 分支建立追踪关系
git checkout -b feature origin/feature git pull
另外提一点,当 clone 远端仓库的时候就已经自动建立了本地 master 分支和远端 master 分支的追踪关系
对 feature 分支进行开发
编辑文件的方式有很多种,这里用 vim 来演示vim README.md git add . git commit -m "add A" git push
在 gitee 仓库可以看到成员A进行了提交
(五)成员A将本地 master 分支推送到远端仓库
这里使用合并分支的第一种方式:
先把本地 master 分支合并到本地 feature 分支上,然后切换到本地 feature 分支将 master 分支推送到远端仓库git merge master
合并 master 分支到 feature 分支
git checkout master
切换到 master 分支
git merge feature
合并 feature 分支到 master 分支
git push
推送
为什么要按这个复杂的流程来呢?
因为在解决合并冲突时,可能会不小心引入新的 bug。为了确保主分支的稳定性,不能直接将 feature 分支合并到 master 分支。
正确的做法是先将 master 分支合并到 feature 分支,解决冲突并确认没有引入 bug 后,再将 feature 分支合并回 master 分支。
这样,如果之前已经有过 master 和 feature 分支的合并记录,后续合并时就不容易发生冲突(因为这些操作都是在本地进行的)
(六)删除 feature 分支
成员A成功把本地 master 分支合并到远端 master 分支后,如果需要,可以选择将 feature 分支删除。
这里使用删除分支的第一种方式:
- 在 Gitee 远端仓库删除 feature 分支
- 在本地删除 feature 分支
切换到 master 分支git checkout master
本地删除 feature 分支git branch -D feature
删除已经被远程仓库删除的本地跟踪分支git pull --prune
示例二
场景:成员A(章玉阁)和成员B(余歌duck)克隆远程仓库后才创建分支。成员A在分支 feature-1 下开发:编写 file1.txt;成员B在分支 feature-2 下开发:编写 file1.txt 和 file2.txt
(一)成员B克隆仓库
git clone git@gitee.com:yugeduck/git-test.git
cd git-test
(二)创建分支
在示例一中,成员A已经创建了仓库并进行克隆操作,完成提交后删除了 feature 分支。
接下来通过第二种方式来创建分支:
git checkout -b feature-1
创建本地分支,但是不指定与远程分支 orgin/feature-1 建立连接
git push origin feature-1
创建远端分支
git branch -vv
查看追踪关系
由于没有建立追踪关系,无法直接使用 git pull git push 等缩写指令
此时有两种方法:①使用完整的命令 ②建立远端分支与本地分支的追踪关系
git branch --set-upstream-to=origin/feature-1
建立追踪关系
另外提一点,
git push -u origin feature-1
这条命令在创建远端分支时,会自动建立追踪关系
(三)成员B 同理
- 与 成员A 同步骤
- 在 Gitee 上可以看到已经多了两个分支(feature-1、feature-2)
(四)成员A编写 file1.txt 并提交
(五)成员A合并分支
这里使用合并分支的第二种方式(更推荐):成员A 提交 pull request,将本地 feature-1 合并到远端 feature-1,再合并到 master。
- 在 Gitee 上提交 pull request
可自动合并说明没有遇到冲突(此时是将 成员A 本地 feature-1 分支合并到 远端 feature-1 分支) - 仓库的管理人员完成审核通过、测试通过后,合并到 master 分支中
(六)成员B 修改 file1.txt,并编写 file2.txt
(七)成员B合并分支
成员B 提交 pull request,将本地 feature-2 合并到远端 feature-2,再合并到 master
- 在 Gitee 上提交 pull request
不可自动合并说明遇到了冲突 - 遇到冲突,手动解决冲突
注意不能在 master 分支上处理冲突。原因和解决方式参考上文。
git checkout master
切换到 master 分支
git pull
拉取最新版本
git checkout feature-2
切换到 feature-2 分支
git merge master
将 master 合并到 feature-2
git status
查看冲突文件
打开冲突文件,从当前版本和远程仓库中的版本选择一个
git add file.txt
标记冲突已解决
git commit
提交到暂存区
git log --oneline
检查合并情况
1. 此时 Gitee 再次发起 pull request 请求就不会遇到问题
(八)合并成功后,如果需要,可以选择将 feature-1 或 feature-2 分支 删除
这里使用删除分支的第二种方式:
git push origin --delete feature-1
删除远端分支
git branch -D feature-1
删除本地分支