# git branch

# 开始

git branch [--color[=<when>] | --no-color] [--show-current]
	[-v [--abbrev=<length> | --no-abbrev]]
	[--column[=<options>] | --no-column] [--sort=<key>]
	[(--merged | --no-merged) [<commit>]]
	[--contains [<commit]] [--no-contains [<commit>]]
	[--points-at <object>] [--format=<format>]
	[(-r | --remotes) | (-a | --all)]
	[--list] [<pattern>…​]
git branch [--track | --no-track] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-c | -C) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>…​
git branch --edit-description [<branchname>]

# git更新远程分支列表

git -prune // 从对象数据库中删除所有不可访问的对象
git remote update --prune // git 清理无效的远程追踪分支

# git分支常用

git branch
git branch -a
git branch -D 分支名

upstream分支操作

  1. 确保工作树是干净的,可以使用git status 查看;
  2. 创建并切换到新的上游分支的本地版本 git checkout -b new upstream/new;
  3. 将新的分支推送到个人远程仓库 git push -u origin new,-u跟踪指定的远程

# git修改分支名,实现无缝衔接

例如,我们的想新建的分支名为 feature/story-13711,却写成了 feature/stor-13711

语法:git branch -m
命令:git branch -m feature/stor-13711 feature/story-13711
image.png
执行完之后发现文件的工作区已修改内容一点都没有变化,真正的实现了无痛过渡,皆大欢喜!

# 选项

-d --delete
删除分支。该分支必须完全合并到其上游分支中,或者HEAD如果没有上游设置为--track--set-upstream
-D
快捷键--delete --force
-l --create-reflog
创建分支的reflog。这将激活对分支ref的所有更改的记录,从而可以使用基于日期的sha1表达式,如“ @ {yesterday}”。请注意,在非裸仓库中,configlog core.logAllRefUpdates选项通常默认启用reflog 。否定形式--no-create-reflog只会覆盖较早的形式--create-reflog,但目前并不否定这种设置core.logAllRefUpdates
-f --force
如果已存在,请将重置为。没有-f git branch拒绝改变现有的分支。结合-d(或--delete),允许删除分支,而不考虑其合并状态。结合-m(或--move),即使新分支名称已存在,也允许重命名分支。
-m --move
移动/重命名分支和相应的reflog。
-M
快捷键--move --force
--color=
颜色分支突出显示当前,本地和远程跟踪分支。该值必须始终(默认),永不,或自动。
--no-color
关闭分支颜色,即使配置文件将默认设置为颜色输出。和...一样--color=never
-i --ignore-case
排序和过滤分支不区分大小写。
--column= --no-column
在列中显示分支列表。有关选项语法,请参阅配置变量column.branch。--column--no-column不带选项相当于alwaysnever分别。
该选项仅适用于非详细模式。
-r --remotes
列出或删除(如果与-d一起使用)远程跟踪分支。
-a --all
列出远程追踪分行和当地分行。
--list
列出分支。使用可选项<pattern>...,例如git branch --list 'maint-*',仅列出与模式匹配的分支。
这不应与此混淆git branch -l <branchname>,它会创建一个以<branchname>reflog 命名的分支。详情见--create-reflog上文。
-v -vv --verbose
在列表模式下,显示sha1并为每个头提交主题行,以及与上游分支(如果有)的关系。如果给出两次,也打印上游分支的名称(另请参阅git remote show <remote>)。
-q --quiet
创建或删除分支时更安静,抑制非错误消息。
--abbrev=
改变输出列表中sha1的最小显示长度。默认值是7,可以由core.abbrevconfig选项覆盖。
--no-abbrev
在输出列表中显示完整的sha1,而不是缩写它们。
-t --track
创建新分支时,设置branch.<name>.remotebranch.<name>.merge配置条目以将起点分支标记为新分支的“上游”。这个配置会告诉git显示in git status和in两个分支之间的关系git branch -v。此外,它在git pull没有参数的情况下指示新分支签出时从上游撤出。
当起始点是远程跟踪分支时,此行为是默认行为。false如果需要git checkoutgit branch可以将branch.autoSetupMerge配置变量设置为并且始终表现得像--no-track给定的一样。always如果您想在起点为本地或远程跟踪分支时想要此行为,请将其设置为。
--no-track
即使branch.autoSetupMerge配置变量为true,也不要设置“上游”配置。
--set-upstream
如果指定的分支尚不存在或者--force已经给出,则完全相同--track。否则,--track在创建分支时设置配置,除非分支指向的地方不更改。
-u --set-upstream-to=
设置的跟踪信息,以便被视为的上游分支。如果未指定,则默认为当前分支。
--unset-upstream
删除的上游信息。如果未指定分支,则默认为当前分支。
--edit-description
打开一个编辑器,编辑文本解释分支是干什么用的,通过其他各种命令使用(例如format-patchrequest-pullmerge(如果启用))。可以使用多行解释。
--contains
只列出包含指定提交的分支(如果未指定,则为HEAD)。意味着--list
--no-contains
只列出不包含指定提交的分支(如果未指定,则为HEAD)。意味着--list
--merged
仅列出可从指定提交中获得提示的分支(如果未指定,则为HEAD)。暗示--list,不符合--no-merged
--no-merged
仅列出提示无法从指定提交中获得的分支(如果未指定,则为HEAD)。暗示--list,不符合--merged

要创建或删除的分支的名称。新的分支名称必须通过由git-check-ref-format [1]定义的所有检查。其中一些检查可能会限制分支名称中允许的字符。

新的分支头将指向这个提交。它可以作为分支名称,提交标识或标签给出。如果省略此选项,则将使用当前的HEAD。

要重命名的现有分支的名称。

现有分支的新名称。与相同的限制适用。
--sort=
根据给定的关键字进行排序。前缀-按值的降序进行排序。您可以多次使用--sort = 选项,在这种情况下,最后一个键变为主键。支持的密钥与中的密钥相同git for-each-ref。排序顺序默认为基于完整的refname(包括refs/...前缀)排序。这将首先列出分离的HEAD(如果存在),然后列出当地分支和最终远程跟踪分支。
--points-at
只列出给定对象的分支。
--format
%(fieldname)从显示的分支ref 中插入的字符串以及它指向的对象。格式与git-for-each-ref [1]的格式相同。

# 参考

  1. git prune (opens new window)