简介
git branch 命令是用来查看分支信息,或者对分支做操作的指令。
创建分支
# 从当前分支创建 feature/a 分支
git branch feature/a
# 切换到新创建的分支 feature/a
git switch feature/a
如果想要创建分支并且切换到新创建的分支,可以使用 git checkout -b feature/a 或者 git switch -c feature/a。
删除分支
假设我们的分支如下图
可删除的前提条件
可删除的分支需要满足以下两个条件中的某一个
- 分支的所有提交都已经被合入 HEAD
- 分支的所有提交已经被推送到远端(会报 warning)
如果不满足的话,就不能直接删除,需要强制删除。做这个限制的原因是保证你的提交不会被你的意外操作弄丢失。
删除本地分支
# 删除 feature/a 分支
git branch -d feature/a
因为 feature/a 的所有提交都已经被合入 HEAD,所以可以直接删除。
# 删除 feature/b 分支
git branch -d feature/b
虽然 feature/b 的部分提交(c5)没有被合入到 HEAD,但是它所有的提交已经被推送到了远端,即使删掉了本地分支,依然可以从远端恢复回来,所以还是删除成功,但是会给你一个 warning。
warning: 将要删除的分支 'feature/b' 已经被合并到 'refs/remotes/origin/feature/b',但未合并到 HEAD。
# 删除 feature/c 分支
git branch -d feature/c
因为 feature/c 不满足任何一个条件,所以不能删除,不然会丢失 c6。如果你确定不需要这个 c6,那么可以通过 git branch -D feature/b 强制删除分支。
不能删除当前所在的分支,比如你在 feature/a 分支上就不能删除 feature/a 分支,需要切换到其他分支上才能执行删除操作
删除远程分支
# 删除本地对远程分支的跟踪
git branch -d -r origin/feature/b
上面的删除只能删除本地对远程分支的跟踪,并不能删除远程分支,等下次 git fetch 或者 git pull 的时候,还是会恢复跟踪。
如果想要删除远程分支,可以使用 git push origin -d feature/b。
重命名分支
git branch -m feature/a feature/a-rename
顾名思义,重命名之后,原分支 feature/a 不再存在。
复制分支
git branch -c feautre/a feature/a-copy
顾名思义,复制分支,原分支 feature/a 依然存在。
查看分支信息
假设我们的分支是下图所示。
查看本地分支
git branch
# 或者
git branch -l
打印结果如下
dog
feature/a
feature/c
feature/d
* main
如果想要查看比较详细的信息可以使用下面的命令
# 查看分支信息
# 并且列出每个分支的 HEAD 的 commit 信息和远程分支信息
git branch -vv
打印结果如下
dog e176f46 [origin/dog: 领先 1] feat: dog2
feature/a 9352fc7 [origin/feature/a] feat: 增加a文件
feature/c dfd65ad [origin/feature/c] Merge branch 'feature/readme' into 'main'
feature/d f93b534 [origin/feature/d] feat: g2
* main dfd65ad [origin/main] Merge branch 'feature/readme' into 'main'
查看远程分支
git branch -r
打印结果如下
origin/HEAD -> origin/main
origin/dog
origin/feature/a
origin/feature/c
origin/feature/d
origin/main
查看全部分支(本地和远程)
git branch -a
打印结果如下
dog
feature/a
feature/c
feature/d
* main
remotes/origin/HEAD -> origin/main
remotes/origin/dog
remotes/origin/feature/a
remotes/origin/feature/c
remotes/origin/feature/d
remotes/origin/main
通过分支名查看匹配的分支
# 查看所有以 feature/ 开头的分支
# 只能查到本地满足条件的分支
git branch -l "feature/*"
打印结果如下
feature/a
feature/c
feature/d
通过 commit 号查看匹配的分支
包含某个提交号的分支
# 包含 commit 号为 0feef03 的分支
git branch --contains "5dcf728"
打印结果如下
feature/a
不包含某个提交号的分支
# 不包含 commit 号为 0feef03 的分支
git branch --no-contains "0feef03"
打印结果为空,因为所有的分支都包含这个分支号。
查看全部和远程可以通过增加 -a, -r 选项实现。
其他
在创建和删除分支的时候可以加上 -q 选项,控制台就不会打印非错误信息,在编写自定义指令时不想让用户看到提示信息时很有用。