一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 3 天,点击查看活动详情。
1. 分支的创建
工作开发中,每当来一个需求,都需要从 dev 分支上拉取一个新的分支,在新的分支上开发完成新的功能。git 提供的新建分支的命令有两个,其中git checkout <branchName>可以创建一个新的分支,也是网上很多人都了解的,但这个命令不够见名知义。
事实上,git 提供了git switch <branchName>来管理创建分支操作(switch 英文就是切换的意思)
# 创建一个新的分支
git branch dev_userLogin
# 切换到 dev_userLogin 分支
git switch dev_userLogin
# 合并以上 2 个操作
git branch -c dev_userLogin
2. 分支的切换的问题
每个技术团队的对于具体的分支类别命名是不同,不过一般都有以下几种分支类型
- master :最新稳定的版本
- release :上线新的版本,或者打包项目的分支(通过 tag 管理)
- dev :开发版本主分支,小功能一般以 dev_xxx 命名,dev 分支一般都领先于 master 分支
分支之间的最常见操作就是合并分支,在合并分支之前需要明确一个很容易被忽视的点——对于工作区和暂存区的修改,只要尚未 commit 到版本库,这些修改对所有分支都是可见的。实际开发中,很多人会发现,当你在 dev_userLogin 分支工作区有修改时,但还未提交,此时切换到 dev 分支时,是无法成功的,会出现如下提示
被拒绝?这与上文说的不一致?
其实这是由于,dev 分支的版本库与 dev_userLogin 的版本库不一致导致的。也就是说,工作区与暂存区对所有分支可见,有一个大大的前提就是,当且仅当两个分支的版本库是一致的;否则,必须在其中一个分支上完成工作区与暂存区的内容提交,然后切换到另一个分支上,进行分支合并操作。
3. 暂时保存修改
若此时,开发人员就是想要回到 master 分支,而不想动 dev 分支中工作区或暂存区中的内容,该怎么办呢?
这时需要一个神奇的命令git stash
git stash命令是将当前工作区与暂存区的一些修改存放到一个堆栈中,这个堆栈对于所有分支都是可见。因此,即使是在 dev 分支上存放的堆栈信息,切换到 master 分支上,也能看到,甚至可以在 master 分支上将堆栈信息恢复过来。在另一个分支上,恢复堆栈信息时,会触发 Auto-mergin的操作
关于git stash的一些其他指令
# 将工作区和暂存区修改存放到一个堆栈中,并清空工作区与暂存区
git stash
# 查看堆栈中的信息列表
git stash list
stash@{0}: WIP on dev: 86fb54f dev 比 master 领先一个分支
# 恢复堆栈中的记录到工作区或暂存区,但不删除堆栈中对应的记录
git stash apply
# 删除堆栈中的记录
git stash drop
# (推荐)恢复的同时删除记录
git stash pop
# 对于多个堆栈信息,可以指定版本号
git stash pop stash@{0}