Git2️⃣本地仓库 & 分支
本文基于本地仓库,介绍 Git 常用的基础指令和分支指令。
1、初始化
-
创建目录作为本地仓库。
-
进入目录的
Git bash
,执行初始化命令。git init
-
生成
.git
隐藏文件,说明初始化成功。
2、本地仓库
根据不同的 Git 指令操作,文件存在不同的状态。
-
工作区(workspace):存放项目代码的地方。
-
暂存区(index):提交到本地仓库之前的缓存。
2.1、重要指令(❗)
2.1.1、status
status:查看文件状态
-
格式:
git status
-
不同区域的状态:
-
工作区:untracked(新建-未追踪),unstaged(修改-未暂存)
-
暂存区:staged(暂存)
-
2.1.2、add
add:将工作区指定内容添加到暂存区。
格式:
# 添加指定内容
git add xxx
# 通配符:添加所有内容
git add .
2.1.3、commit
commit:将暂存区所有内容提交到本地仓库的当前分支。
格式:
# 提交所有内容
git commit -m "注释信息"
2.1.4、日志
① log
log:查看版本提交记录。
-
格式:常用参数如下
-
all:显示所有分支
-
pretty=oneline:将每条记录优化为单行显示
-
abbrev-commit:将 commitID 缩写显示
-
graph:以图的形式显示
git log --pretty=oneline --all --graph --abbrev-commit
-
-
示例:👉 2.3.3 配置指令别名
② reflog
reflog:查看版本所有操作记录。
-
格式:
git reflog
-
示例:
③ 说明
- 日志中的
HEAD
代表最新提交版本,以及位于该版本的分支。 - 若发生版本回退:
log
:仅支持查看回退版本号之后的记录。reflog
:支持查看所有版本的记录 + 已删除的 commit 记录。
2.2、忽略文件
场景:部分文件无需提交,不需要被 Git 管理(如临时文件、日志)。
实现:在工作目录创建 .gitignore
文件,定义要忽略的文件。
-
指定文件
-
指定后缀
-
指定文件夹
# 指定文件 Hello.java # 指定后缀 *.txt # 指定文件夹 **/log/*
2.3、版本切换
reset:通过 commitID 切换版本(回退/还原)
格式:通过 log 或 reflog 查看 commitID。
git reset --hard <commitID>
3、分支(❗❗)
作用:使用分支进行不同操作(开发、测试、缺陷修复),避免影响主线(master)。
3.1、branch
本地分支
-
查看分支:
*
表示所在分支。# 分支名 git branch # 详细信息 git branch -vv
-
创建分支:基于当前分支创建,二者内容相同。
git branch 分支名
-
删除分支:不能删除当前分支,只能删除其他分支。
-
-d:删除前检查
-
-D:不做检查,强制删除
git branch -d 分支名 git branch -D 分支名
-
示例
3.2、切换
3.2.1、checkout
checkout:检出(切换)分支
Hint:分支上的内容必须先 commit 或 stash,才能切换分支。
-
格式:
-
切换到指定分支。
-
基于当前分支创建新分支,并切换(👍)。
# 切换 git checkout 分支名 # 创建并切换 git checkout -b 分支名
-
-
示例:
3.2.2、stash
stash:将分支上的内容暂时缓存,而不提交。
场景:开发时需要临时切换到其它分支,将当前分支内容缓存到一个栈结构中。
-
查看:查看当前栈中的缓存内容。
-
保存:将工作区内容保存到栈中。
-
删除:将栈中内容删除。
- drop:指定索引
- clear:所有
-
恢复:将内容恢复到当前工作区。
-
apply:指定索引内容(仅应用不删除)
-
pop:栈顶内容(应用并删除)
# 查看 git stash list # 保存 git stash save "注释信息" # 删除 git stash drop stash@{索引} git stash clear # 恢复 git stash apply stash@{索引} git stash pop
-
示例
3.3、合并
原理:最近公共祖先(LCA)
3.3.1、merge
merge:将其它分支的内容合并到当前分支。
-
格式:
git merge 分支名
-
示例:出现分叉说明有多个分支在提交。
3.3.2、rebase(*)
相比 merge,会修改基。
不建议在实际开发中使用。
3.3.3、冲突处理
冲突:合并分支时,多个分支对同个文件的同一行进行修改,Git 无法确定合并结果。
-
机制:发生冲突时,Git 会在冲突文件中列出不同分支对同一行的修改情况,由开发者保留最终结果。
-
步骤:
-
发生冲突:执行 merge 指令,且发生冲突之后。
-
保留结果:打开冲突文件,保留需要的结果。
-
提交:将冲突文件添加到暂存区,提交到仓库(即 add, commit)。
-
3.4、分支规范(*)
3.4.1、常用分支
- master:主分支,对应生产环境
- dev:开发主分支,对应开发环境
- 从 master 检出
- 阶段开发完成后,合并到 master 准备上线。
- test:测试分支。对应测试环境的应用
- 通常从 dev 合并
- 开发完成并提测后,由测试人员进行使用。
3.4.2、衍生分支
- dev-xxx:开发者分支,对应一个开发人员。
- 从 dev 检出,开发完成后合并到 dev
- feature/xxxx:新功能分支,对应一个业务功能。
- 从 dev 检出,开发完成后合并到 dev。
- 通常是同期并行开发,但不同期上线时创建的分支
- hotfix/xxxx(bugfix/xxxx):缺陷修复分支
- 通常是测试人员发现 bug,创建分支用于修复 bug。