在git进行完成功能合并分支是出现:
The name is invalid. Ref names must follow git ref-format rules:
https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html
Additionally Sourcetree does not support the use of ‘/’ in Git-flow branch names
原因,git上的命名规则在2020-3-20号的时候进行了更新,要确保分支名称的正确
git-check-ref-format-确保参考名称格式正确
git check-ref-format [--normalize]
[-[no-] allow-onelevel] [--refspec-pattern]
<refname>
git check-ref-format --branch <分支名称-缩写>
描述
检查给定的refname是否可接受,如果不是,则以非零状态退出。
在Git中使用引用来指定分支和标签。分支头存储在refs/heads层次结构中,而标记存储在refs/tagsref名称空间的层次结构中(通常在$GIT_DIR/refs/heads
和$GIT_DIR/refs/tags
目录中,或者,$GIT_DIR/packed-refs
如果ref被打包,则作为文件中的条目git gc)。
Git对引用的命名方式施加以下规则:
- 它们可以包括
/
用于层次结构(目录)分组的斜杠
,但斜杠
分隔的组件不能以点开头.
或以序列结尾.lock
。 - 它们必须至少包含一个
/
。这会强制出现诸如等等的类别heads/,tags/但实际名称不受限制。如果使用该–allow-onelevel选项,则该规则将被放弃。 - 它们…在任何地方都不能有两个连续的点。
- 它们不能在任何地方具有ASCII控制字符(即,其值小于
\ 040
或\ 177
的字节DEL),空格,代字号~,插入符^或冒号:。 - 它们在任何地方都不能有问号?,星号*或方括号[。请参阅以下–refspec-pattern选项,以了解此规则的例外情况。
- 它们不能以
斜杠开头或结尾
,也不能/
包含多个连续的斜杠(有关–normalize此规则的例外,请参阅下面的选项) - 它们不能以点结尾.。
- 它们不能包含序列
@{
。 - 它们不能是单个字符
@
。 - 它们不能包含
\
。
这些规则使基于Shell脚本的工具可以轻松解析引用名称,在引用名称不加引号的情况下(错误地)由Shell扩展路径名,还可以避免某些引用名称表达式中的歧义(请参见gitrevisions(7)):
…通常在中使用 双点ref1..ref2
,并且在某些情况下,该符号表示^ref1 ref2
(即,不在 ref1和中ref2)。
使用代字号~和插入号^来引入后缀 第n个父代和皮洋葱操作。
在提取和推送操作:
中srcref:dstref
, 冒号用于表示“使用srcref的值并将其存储在dstref中”。它还可以用于选择特定对象,例如
git cat-file:“ git cat-file blob v1.3.3:refs.c”。
at-open-brace @{用作访问引用日志条目的表示法。
使用该–branch选项,该命令将使用一个名称,并检查它是否可以用作有效的分支名称(例如,在创建新分支时)。但是,在使用以前的可能指向分离的HEAD状态的签出语法时,请务必谨慎。规则的git check-ref-format --branch $name
实现可能比git check-ref-format refs/heads/$name
说的更严格(例如,破折号可能出现在ref组件的开头,但明确禁止在分支名称的开头)。–branch在存储库中使用option 运行时,首先将输入扩展为“先前的签出语法”@{-n}
。例如,@{-1}
是一种使用“ git switch”
或“ git checkout”
操作引用最后签出的内容的方法。瓷器应使用此选项在需要分支名称的任何地方接受此语法,因此它们可以像您键入分支名称一样起作用。作为例外,请注意,如果第N位不是签出分支,则“先前的签出操作”可能会导致提交对象名称。
选件
-[no-] allow-onelevel
控制是否接受一级引用名(即,不包含多个分隔的/组件的引用名)。默认值为–no-allow-onelevel。
–refspec模式
将解释为refspec的引用名称模式(与远程存储库一起使用)。如果这个选项被激活,允许含有单个* 中操作的Refspec(例如,foo/bar*/baz或foo/barbaz/ 而不是foo/bar/baz*)。
-规范化
通过删除任何前导斜杠()字符并将名称组件之间的相邻斜杠折叠成单个斜杠来对refname进行 标准化/。如果标准化的refname有效,则将其打印到标准输出并以0状态退出,否则以非零状态退出。(–print不推荐使用的拼写方式–normalize。)
例子
打印签出的上一件事的名称:
$ git check-ref-format --branch @{-1}
确定要用于新分支的引用名称:
$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")|| { echo "we do not like '$newbranch' as a branch name." >&2 ; exit 1 ; }