大家好,我是 17。
新建 git 分支
分支是并行开发的基础。分支名称的本质是对分支最后一个提交的引用。分支有多个,但 HEAD 只有一个,可以认为 HEAD 是"current branch"(当下的分支)。当你用git switch
切换分支的时候,HEAD 重新指向新的分支。
分支是 git 的杀手级应用。Git 处理分支的方式可谓是难以置信的轻量,git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。分支会涉及很多常用 git 命令,我们在这里一起讲。
分支的名称是一个引用,指向支持的最后一个提交节点。分支就是从父分支开始的第一个节点,到最后一个节点的所有 节点的集合。
当你新建仓库的时候,会默认建立 master 分支。
git init test
git init
两种写法都可以。不同的是,git init test
会在当前目录下新建 test 文件夹,git init
会在当前目录初始化 git。
至于说建议用 main 而不是 master,其实就是名字,名字本无含意,在 git 中就是分支的名字而已,是看名字的人读出了所谓含意。如果在意名字,也是可以修改的。
git init -b main 用 -b 指定初始化的分支为 main
也可以在全局指定,后面就不用 -b
指定了。
git config --global init.defaultBranch main
初始化完成后,新建其它的分支有三种方法。
git checkout -b dev
git switch -b dev
git branch dev
这三种方法都可以新建 dev 分支。不同的是前两种新建并转到新分支,最后一种只新建分支不跳转。
既然 git checkout -b dev
和git switch -b dev
效果完全一样,为什么弄出两个来?开始都是用 git checkout -b
,后来觉得用git checkout -b
不够清晰,checkout
被赋予了太多职责,所以增加了 switch 命令。
本地分支
列出,创建,或删除 branches。
git branch 列出
git branch dev 创建
git branch -d dev 删除
git branch -vv
输出:
feature 3446d05 [origin/feature] feat:开发登录功能
* master ad9da22 [origin/master: ahead 3, behind 2] Merge branch dev
* 代表 master 是当前分支。
origin/master 是远程分支,master 是 origin/master 的跟踪分支。
- ahead 3: master 超前 origin/master 3 个提交
- behind 2: master 落后 origin/master 2 个提交
你可能会迷惑,怎么又超前同时又落后呢? 其实并不矛盾。没有更新到远程的提交就是超前,没有同步到本地的提交就是落后。
删除远程分支
先删除远程分支
git branch -d origin feature
再删除本地跟踪的同名分支
git branch -d feature
注意:必须先切到其它分支,如果当前在 feature 分支,无法删除
如果 feature 没有合并到 master ,需要用 -D 强制删除
注意:建议不要删除远程分支,已经发布的分支如果删除了,可能会给别人造成影响。