天天看点

Git 代码分支管理 / 版本管理

Git 代码分支管理 / 版本管理

在使用 Git 时,基本不可能只有一个分支。

即使只有一个人发开,也会考虑代码的安全而分多个分支。多人协同开发时,可能每个人在不同的分支开发,也可能不同团队在不同的分支开发,还有就是不同的功能在不同的分支开发。

划分分支的方式根据不同的企业和项目而不同,以需求为导向。

一、git 分支管理

1. 状态描述

本文中,在 Github 上托管了项目 GitProject 的代码,在本地 Windows 中创建了本地代码仓库 ~/Desktop/git_project/GitProject 。当前只有一个分支 master ,提交了3次代码,项目中只有一个 git.py 文件。

Git 代码分支管理 / 版本管理

2. 创建本地分支

一开始,本地只有一个分支 master 。

这时候切到其他分支,会报错,因为分支根本不存在。使用 git branch release 创建一个名字叫 release 的分支,然后使用 git branch 查看,当前新增了一个分支,但是还处于 mster 分支上(绿色)。

使用 git checkout release 切换到 release 上,再使用 git branch 查看,当前已经处于 release 分支上了。

使用 git checkout -b dev1 创建并切换到 dev1 分支上,相当于 git branch dev1 和 git checkout dev1 两条命令。

# 查看当前分支
git branch
# 查看所有分支,包括远程分支
git branch -a
# 切换分支
git checkout release
# 创建并切换分支
git checkout -b dev1      
Git 代码分支管理 / 版本管理

3. 创建远程分支

在本地仓库创建分支后,到远程仓库查看,本地分支还没有同步到远程仓库,因为没有用新创建的分支提交过代码。

Git 代码分支管理 / 版本管理

在 Github 上点击 Branch 按钮,然后输入要创建的分支名,如 bugfix ,然后点击 Create branch bugfix 按钮创建分支。

Git 代码分支管理 / 版本管理

创建之后,页面会自动刷新,刷新后,可以看到当前处于新创建的 bugfix 分支上,现在分支数已经变成两个了。

Git 代码分支管理 / 版本管理

再回到本地,本地看不到在 Github 上新建的分支,使用 git fetch origin 可以获取远程的代码或分支的更新。

执行命令后,重新使用 git branch -a ,可以查看到远程新创建的分支。

Git 代码分支管理 / 版本管理

4.代码合并

现在在dev1上开发代码,然后提交到远程仓库。

Git 代码分支管理 / 版本管理

当使用本地分支提交代码后,本地分支会同步到远程仓库。在之前没有使用过dev1分支提交过代码,在远程仓库上没有dev1,现在远程库上可以看到dev1分支,并且有4次提交。

Git 代码分支管理 / 版本管理

现在选择到master分支,看到master分支的代码还是3次提交,刚才在dev1分支提交的代码不会影响到master分支,是独立的。

Git 代码分支管理 / 版本管理

现在,比如说在dev1开发一个功能,这个功能在dev1上验证通过了,要合入master,可以使用 git merge 来实现。

# 切换到主分支
git checkout master
# 合并dev1到master
git merge dev1      

合并dev1的代码到master后,代码处于仓库区待 push 状态,可以看到,当前本地仓库领先远程代码仓库一次提交,使用 git push origin master 将代码提交到远程仓库。

Git 代码分支管理 / 版本管理

提交代码后,远程仓库中的master分支也变成了4次提交,代码合并成功。

Git 代码分支管理 / 版本管理

在合并代码的时候,(或多人在同一个分支上开发),很容易出现代码冲突。

当出现代码冲突,会有很多情况,保留一方的代码放弃另一方的代码,或双方都可以保留,或双方都需要修改,这个过程要找相关的人来一起讨论方案,找能决策的人来决定。

以上就是常见的分支管理操作了。

二、git 版本管理

在使用 git 提交代码时,每次 commit 都会生成唯一的版本号,回退版本,创建分支等操作都可以使用到具体的版本号,来按需找到对应的代码状态。

但是,commit 生成的版本号是一个 hash 值,对于程序员来说,不可能去记忆 hash 值版本号。

当项目开发到了阶段性时刻,这个阶段是项目的一个里程碑,这次提交的代码版本是比较特殊的,需要经常使用这个版本,不可能每次都去找 hash 值的版本号。

git 可以通过 git tag 来给项目打标签,定义版本号,更方便的进行版本管理。

# 给项目打标签,git tag -a 标签名 -m "信息"
git tag -a V0.1.0 -m "GitProject Version 0.1.0"
# 将标签提交到远程仓库,git push origin 标签名
git push origin V0.1.0      

现在,给 GitProject 这个项目打第一个标签 V0.1.0,相当于生成第一个版本号。这个版本号的命名规则可以自定义,根据自己的项目来定义。

Git 代码分支管理 / 版本管理

将标签 git push 将标签推到远程仓库后,可以在远程仓库看到对应的版本号。

Git 代码分支管理 / 版本管理

通常,版本号的命名可以参考如下方式:

1.分成三段,中间用点分开,第一段是主版本号,第二段是子版本号,第三段是阶段版本号。阶段版本号更新一般是修复故障时,子版本号更新一般是向下兼容的接口变更时,主版本号更新一般是不兼容的接口变更时。不过,不是必须这样,在实际的项目中,可以灵活自由一点,最开始一般是V0.0.0或V1.0.0。

2.当正常开发有阶段性进展,需要做里程碑标记时,可以在子版本号处加1,加1后,后面的阶段版本号归0,如从V0.0.0变成V0.1.0 。

3.当版本里面有故障等需要修复时,修复后可以在阶段版本号处加1,如从V0.1.0变成V0.1.1 。

4.当有新功能上线时,可以在子版本号处加1,加1后,后面的阶段版本号归0,如从V0.1.1变成V0.2.0 。

5.当项目积累了非常多的修改和新功能,已经发生了很大的变更了,需要升主版本号,则主版本号加1,加1后,后面的子版本号和阶段版本号都归0。如在V0开发了很久,已经到了 V0.15.7,现在版本要升到V1,就是V0.15.7变成V1.0.0 。

Git 代码分支管理 / 版本管理

如果打的标签不需要保留,可以删除标签。

# 删除本地标签
git tag -d 标签名
# 删除远程标签
git push origin --delete tag 标签名      

这样,可以很方便的对项目进行版本管理了。