"git merge"中分支名称规范中的通配符

sbo*_*bos 4 git merge

在"git merge"中指定分支名称时是否可能以某种方式使用通配符?

例如,如果我有:

sbos@malta:~/tmp/texterra$ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/share/branch1
  origin/share/branch2
  origin/share/another-branch
Run Code Online (Sandbox Code Playgroud)

我可不可以做:

git merge origin/share/*
Run Code Online (Sandbox Code Playgroud)

与branch1,branch2和另一个分支合并?

Mar*_*air 9

我认为你不能以这种方式直接使用通配符,但你可以使用git for-each-ref匹配分支名称.例如,查看输出:

git for-each-ref --format="%(refname)" refs/remotes/origin/share/*bran*
Run Code Online (Sandbox Code Playgroud)

(这种模式的故意比你需要的更多,所以我可以证明通配符是有效的.你可以refs/remotes/origin/share/改为.)

所以,作为一个命令你可以做:

git merge $(git for-each-ref --format="%(refname)" refs/remotes/origin/share/)
Run Code Online (Sandbox Code Playgroud)

...从所有这些分支进行章鱼合并.

说实话,我发现我很难想到一个我不太喜欢的情况:

git merge origin/share/branch1
git merge origin/share/branch2
git merge origin/share/another-branch
Run Code Online (Sandbox Code Playgroud)

......或者如果有很多分支:

for c in $(git for-each-ref --format="%(refname)" refs/remotes/origin/share/)
do
    git merge $c || break
done
Run Code Online (Sandbox Code Playgroud)