分支与 tag
分支
分支的本质
分支可以简单的理解为一个指针,指向某个提交。而每个提交都记录了它的父提交,从而形成了一个链表。当某个分支上不断产生提交时,分支指向的提交就会发生改变,不断向后移动,相当于这个链表在不断延长。
查看分支
- 输入
gb
,它会展示所有本地分支,等价于命令git branch
, 输入命令gbv
可以额外显示每个分支的最后一次提交和这个分支跟踪的远程分支,等价于命令git branch -vv
- 输入
gb branch_name
表示创建一个分支,指向当前提交,gb branch_name commit
表示新建一个分支并指向某个 commit,注意这两个命令都不会切换分支。 - 输入
gba
,查看本地和远程分支,等价于命令git branch -a
,输入命令gbr
,查看远程分支,等价于命令git branch --remote
删除分支
- 输入
gbd branch_name
删除某个分支,等价于命令git branch -d
- 并非所有分支都可以通过
gbd
命令删除,可以通过git branch --merged
来查看已经合入到某个指针(默认是 HEAD)的分支,换句话说是可以通过这个指针回溯到的分支。这个命令也简写为gbm
gbm
列出的分支都是可以抵达的,因此可用gbd
删除,而gbnm
列出的则是不可达的分支,因此不能用gbd
删除,它是git branch --no-merged
命令的简写- 如果真的要强行删除,可以用
gbD
命令,它是git branch -D
的简写
切换分支
- 输入
gco branch
可以 checkout 到某个分支上,等价于命令git checkout
,注意如果有未提交的改动,请不要切换分支。 - 输入
gcb new_branch
可以创建分支 new_branch 并切换到这个分支上,它是git checkout -b
命令的缩写,等价于git branch new_branch
和git checkout new_branch
这两条命令
有时候我们要从远程仓库检出一个新的分支,比如叫 feature 吧,有几种思路:
git branch -t feature origin/feature
git checkout -b feature origin/feature
git checkout --track origin/feature
第一种写法不太合适,因为它只会创建分支并且跟踪远程分支,并不会切换。我想一般创建分支的时候都是需要切换的,否则你创建它干嘛呢,可以等到要切换的时候再创建呐。
第二种写法稍微高级些,它和第一种写法一致并且可以切换分支,之前的 tips 中介绍过 gcb
后面加单个参数的含义和用法,这里第二个参数表示跟着远程分支。
第三中方法最简单,因为它参数少,而且功能和第二种写法一样,我给他起的别名叫 gct
,对应 git checkout --track
如果想为当前分支设置跟踪的远程分支,输入 gtrack
即可,不需要携带参数,它会自动让当前分支跟踪远程的同名分支
Tag
标签是分支功能的子集,可以理解为不能移动的分支。前文说过,分支始终指向某个链表的开端,是可以移动的。但 Tag 始终指向某个固定的提交,不会移动。
使用 gco
同样可以切换到某个分支上。其他常用命令如下:
- 使用命令
gt tag_name
可以打 tag,它是git tag
命令的缩写。 - 使用命令
gtd tag_name
可以删除本地 tag,它是git tag -d
命令的缩写