git branch 笔记

458 阅读4分钟

简介

git branch 命令是用来查看分支信息,或者对分支做操作的指令。

创建分支

# 从当前分支创建 feature/a 分支
git branch feature/a
# 切换到新创建的分支 feature/a
git switch feature/a

如果想要创建分支并且切换到新创建的分支,可以使用 git checkout -b feature/a 或者 git switch -c feature/a

删除分支

假设我们的分支如下图

git-branch-delete.png

可删除的前提条件

可删除的分支需要满足以下两个条件中的某一个

  • 分支的所有提交都已经被合入 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-list-local.png

git-branch-list-origin.png

查看本地分支

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 选项,控制台就不会打印非错误信息,在编写自定义指令时不想让用户看到提示信息时很有用。