1. 标准工作流程
1.1 管理分支
Git是一个分布式版本控制系统,分支管理是其核心功能之一。分支允许开发者在不同的版本上进行并行开发,之后可以将其合并到主分支。这里我们将详细介绍如何使用Git进行分支管理。
查看分支:
要查看本地分支,可以使用以下命令:
git branch
若要查看远程分支,可以使用:
git branch -r
要同时查看本地和远程分支,可以使用:
git branch -a
创建分支:
要创建一个新分支,可以使用以下命令(将new_branch替换为实际分支名):
git branch new_branch
切换分支:
要切换到一个已有分支,可以使用以下命令(将target_branch替换为实际分支名):
git checkout target_branch
或者可以使用以下命令在创建分支的同时切换到新分支(将new_branch替换为实际分支名):
git checkout -b new_branch
合并分支:
在合并分支之前,先切换到目标分支(将target_branch替换为实际分支名):
git checkout target_branch
然后使用以下命令将指定分支合并到当前分支(将source_branch替换为实际分支名):
git merge source_branch
删除分支:
要删除一个本地分支,可以使用以下命令(将target_branch替换为实际分支名):
git branch -d target_branch
要删除一个远程分支,可以使用以下命令(将remote_name和target_branch替换为实际远程名称和分支名):
git push remote_name --delete target_branch
推送分支:
要将本地分支推送到远程仓库,可以使用以下命令(将remote_name和branch_name替换为实际远程名称和分支名):
git push remote_name branch_name
一个小例子:
假设我们有一个名为feature_x的新功能要开发,可以通过以下步骤创建并管理分支:
创建并切换到feature_x分支:
git checkout -b feature_x
开发新功能并将更改提交到feature_x分支:
git add .
git commit -m "Add feature_x"
开发完成后,切换回主分支(通常为main或master):
git checkout main
将feature_x分支合并到主分支:
git merge feature_x
将合并后的主分支推送到远程仓库:
git push origin main
如果不再需要feature_x分支,可以按照以下步骤进行删除:
首先确保已经切换到其他分支,例如主分支(main或master):
git checkout main
然后删除本地的feature_x分支:
git branch -d feature_x
如果feature_x分支已经推送到远程仓库,还需要删除远程分支。将origin替换为远程仓库的名称(通常为origin):
git push origin --delete feature_x
1.2 分支策略
主分支(Master):稳定性至关重要。禁止将未经过代码审查和测试的代码合并到此分支。主分支上的代码应随时准备好部署到生产环境。
开发分支(Develop):开发分支是持续集成的基础。经过代码审查的修改可以合并到此分支。后续的 Bug 修复和功能开发都应基于开发分支进行。开发人员在完成修改后,将代码合并回开发分支。
功能分支(Feature):功能开发和变更请求的分支。对于每个功能,可以从开发分支创建一个新的功能分支。功能开发完成、经过代码审查和测试后,将功能分支合并回开发分支。
热修复分支(Hotfix):紧急修复分支。当主分支上的代码发布到生产环境后出现问题时,可以从主分支创建一个热修复分支。修复完成后,将热修复分支合并到开发分支和主分支。
预发布分支(Release):预发布分支用于版本发布前的准备,如 v0.1、v0.2、v1.12 等。通常,系统测试基于这些分支进行。如果在预发布分支上发现 Bug,可以基于该预发布分支创建一个临时 Bug 修复分支。
Bug修复分支(Bugfix):Bug 修复分支用于解决已知问题。开发人员在定位并解决问题后,将 Bug 修复分支合并到开发分支和预发布分支。然后,测试人员进行回归测试。回归测试完成后,关闭对应的 Bug。
2. 创建标签
2.1 创建
在Git中使用标签的主要原因是对特定提交点进行标记,以便于追踪和引用。标签通常用于表示重要的里程碑,例如版本发布。与分支不同,标签是固定的,它们不会随着后续提交而移动。
创建标签有两种类型:轻量标签(lightweight)和带附注的标签(annotated)。
轻量标签:轻量标签是一个简单的引用,指向特定的提交。创建轻量标签的命令如下:
git tag tag_name
将tag_name替换为实际的标签名称。
带附注的标签:带附注的标签是存储在Git数据库中的完整对象,它们包含更多信息,如标签创建者、创建日期、附加的描述信息等。通常,我们建议使用带附注的标签,因为它们提供了更多的上下文信息。创建带附注标签的命令如下:
git tag -a tag_name -m "tag message"
将tag_name替换为实际的标签名称,将tag message替换为有关此标签的描述性消息。
创建标签后,可以使用以下命令将其推送到远程仓库:
git push origin tag_name
将tag_name替换为实际的标签名称。要一次性推送所有本地标签到远程仓库,可以使用:
git push origin --tags
2.2 签署
签署标签是为了确保标签的真实性和完整性。通过使用GPG(GNU Privacy Guard)对标签进行签名,你可以证明这个标签是由你创建的,并且自创建以来未被篡改。签署标签通常用于安全敏感的项目或在发布过程中,以确保代码的来源和完整性。
在签署标签之前,需要先设置好GPG。以下是签署标签的步骤:
安装GPG。根据你的操作系统,你可能需要从GPG官方网站下载并安装GPG工具:https://gnupg.org/
Ubuntu:sudo apt install gnupg
CentOS:sudo yun install gnupg
生成GPG密钥。打开命令行或终端,运行以下命令以开始生成密钥:
gpg --gen-key
按照提示操作,生成密钥时可能需要输入名称、电子邮件地址和密码。生成完成后,密钥将自动添加到密钥环中。
获取GPG密钥ID。运行以下命令,获取密钥ID:
gpg --list-secret-keys --keyid-format LONG
查找以sec开头的行,密钥ID是/后面的16位字符。
将GPG密钥添加到Git配置。使用刚刚获取的密钥ID(替换your_key_id):
git config --global user.signingkey your_key_id
签署标签。使用-s或--sign选项创建带附注的标签,并使用GPG密钥进行签名:
git tag -a -s tag_name -m "tag message"
将tag_name替换为实际的标签名称,将tag message替换为有关此标签的描述性消息。
验证签名。要验证签名,可以使用以下命令:
git tag -v tag_name
将tag_name替换为实际的标签名称。如果签名有效,将看到类似于Good signature from <your_name>的消息。
3. 操作标签
创建完标签(tag)后,你可以执行以下操作:
查看标签列表:运行以下命令来查看所有已创建的标签:
git tag
带有-l或--list选项可以过滤标签,如:
git tag -l "v1.*"
这将显示以v1.开头的所有标签。
查看特定标签的详细信息:要查看带附注标签的详细信息(包括创建者、创建日期和标签信息),可以运行:
git show tag_name
将tag_name替换为实际的标签名称。
检出标签:要检出特定标签,可以运行:
git checkout tag_name
将tag_name替换为实际的标签名称。这将让你查看和测试特定标签的代码状态。注意,当你检出标签时,你将进入“分离头指针”状态,这意味着你不在任何分支上。如果你需要在此基础上进行修改,请创建一个新的分支。
删除标签:要删除本地标签,可以运行:
git tag -d tag_name
将tag_name替换为实际的标签名称。要删除远程标签,需要先删除本地标签,然后运行:
git push origin --delete tag_name
将tag_name替换为实际的标签名称。