Git必备基础

安装与配置

下载安装

下载安装:

  • Windows:访问 https://git-scm.com/ 下载并安装。
  • MacOS:安装 Xcode Command Line Tools (xcode-select –install) 或使用 Homebrew (brew install git)。
  • Linux:使用包管理器,例如 sudo dnf install git

图形化 UI 工具:

  • MacOS:SourceTree
  • Windows:TortoiseGit

基础配置

1
2
3
4
5
6
# 配置提交人信息
git config --global user.name "xxx"
git config --global user.email "xxx@xxx.com"

# 查看配置信息
git config --global --list

核心概念与流程

理解区域概念

  1. 工作区(Working Directory)

就是你电脑上当前能看到的项目目录,你在这里编辑文件。

  1. 暂存区(Staging Area)

当你编辑完文件后,通过git add其实就是把变动文件内容添加到了暂存区。

  1. 仓库(Repository)

通过 git commit将暂存区的所有变动内容,提交到仓库的当前分支。这个仓库可以理解为你电脑本地上的 Git 仓库。

  1. 远程库(origin)

将你的本地仓库推送到远程库上,这样既可以用作仓库的备份,又可以与其他人进行协作。

基本工作流程

可以理解为:

  • 在工作区对文件进行编辑;
  • 将有变动的文件统统放到暂存区;
  • 然后一次性提交到仓库分支;
  • 最后将本地仓库分支与远程仓库分支进行同步备份。

工作区-(git add)->暂存区-(git commit)->仓库-(git push)->远程库

基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 初始化git仓库
cd /myproject
git init

# 添加所有变动文件
git add .

# 提交到仓库
git commit -m "仓库初始化"

# 查看工作区/暂存区文件修改状态
git status

# 查看提交历史
git log

分支命令

可以把分支想象成一个平行宇宙,在一个分支上开发不会影响到其他分支。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看所有分支
git branch

# 创建分支
git branch dev
# 切换分支
git checkout dev

# 创建并切换分支
git checkout -b dev

# 合并分支
git checkout master
git merge dev

# 删除分支
git branch -d dev

远程库协作

到目前为止,所有操作都在本地。要团队协作,就需要一个远程仓库作为“中央服务器”,常用的有 GitHub、GitLab、Gitee。

[!tip]
SSH 生产密钥与配置认证,这里不再赘述。

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 克隆远程仓库
git clone git@github.com:username/repository.git

# 关联远程仓库,并给它起个别名叫 "origin"
git remote add origin git@github.com:username/repository.git

# 拉取当前分支的更新
# 相当于执行了 git fetch(获取) 和 git merge(合并) 两条命令
git pull

# 第一次推送时,需要-u,将当前分支与远程分支建立关联
git push -u origin master
# 之后当前分支推送,直接使用即可
git push

从远程库克隆

克隆时远程仓库和分支信息都已知,所以会自动建立好关联。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 克隆远程仓库
git clone https://github.com/company/awesome-project.git
cd awesome-project
# 此方式将自动关联好仓库和分支

# 查看关联的远程仓库信息
git remote -v
# 输出示例:
# origin https://github.com/company/awesome-project.git (fetch)
# origin https://github.com/company/awesome-project.git (push)

# 查看所有分支(本地和远程)
git branch -a
# 输出示例:
# * master
# remotes/origin/HEAD -> origin/main
# remotes/origin/master
# remotes/origin/develop
# remotes/origin/feature/login

本地添加远程库

先将本地项目,初始化为 git 仓库(本地)

1
2
3
4
git init

git add.
git commit -m "初始化项目"

将本地仓库和分支,与远程库建立好关联,才能协作使用。

1
2
3
4
5
6
7
8
9
10
11
# 查看是否已关联远程仓库
git remote -v
# 没有任何输出,说明还没有关联远程库

# 关联远程库
git remote add origin git@github.com:username/repository.git

# 首次推送远程库,需要 -u 将当前分支与远程分支建立关联
git push -u origin master
# 之后当前分支推送,直接使用即可
git push

日常工作流程

以开发一个新功能为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 拉取主分支最新代码
git checkout master
git pull
# 或
git pull origin master

# 新建功能分支,并切换到新分支
git checkout -b feature/user_manage
# 或 基于master新建分支
git checkout -b feature/user_manage origin/master

# 代码开发,并阶段性提交
git add .
git commit -m '用户管理列表'

# 将本地新分支,首次关联推送到远程库分支
git push -u origin feature/user_manage

如果新功能 1 天完成不了,那么后续几天。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 拉取主分支最新代码
git checkout master
git pull

# 切换到新功能分支
git checkout feature/user_manage

# 合并主分支最新代码 到 新功能分支
git merge master
# 或
git rebase master

# 然后可以今天的工作了
git add .
git commit -m '用户详情'

# 推送前,新拉取(当前分支)
git pull
git push

新功能研发完成后,将功能分支合并到主分支。

1
2
3
4
5
6
7
8
9
git checkout master

git pull

git merge feature/user_manage

git push

git branch -d feature/user_manage

分支策略

  • master/prod:生产环境
  • pre:预发布分支
  • test:测试分支
  • dev:开发分支
  • feature/:新功能分支
  • fix/:bug 修复
  • hotfix/:紧急生产问题修复

提交规范

commit 简要格式:type:descript

  • feat: 新功能、新特性
  • fix: 修改 bug
  • perf: 更改代码,以提高性能
  • refactor: 代码重构
  • docs: 文档修改
  • style: 代码格式修改
  • test: 测试用例新增、修改
  • build: 影响项目构建或依赖项修改
  • revert: 恢复上一次提交
  • ci: 持续集成相关文件修改
  • release: 发布新版本
  • chore: 其他修改(不在上述类型中的修改)

[!example] 样例
feat: 用户管理功能

标签策略

基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建标签(轻量标签:无辅助说明信息)
git tag v1.0.0
# 创建标签(附注标签,包含完整信息:标签名、作者、日期、说明信息)
git tag -a v1.0.0 -m "正式环境发版 1.0.0"

# 推送标签(单个)
git push origin v1.0.0
# 推送所有标签
git push origin --tags

# 列出所有标签
git tag

# 查看标签详情
git show v1.0.0

策略约定

1)正式环境:主版本号.次版本号.修订号

1
2
3
4
v1.0.0    # 正式发布
v1.1.0 # 新增功能
v1.1.1 # Bug修复
v2.0.0 # 不兼容的API修改

2)其他环境

1
2
3
4
# 预发布版本
v1.0.0-alpha.1 # 内部测试版
v1.0.0-beta.1 # 公开测试版
v1.0.0-rc.1 # 发布候选版