git

Delete Git branch and tag with same name

How to use git command 12/N

公開日: 2021-05-10

  Table of Contents

リモートにtagと同じ名前のブランチが存在する場合

remote branchの消去など同名のリモートブランチを対象にコマンド操作すると以下のようなエラーが発生します:

1
2
3
% git push origin :<tag or branch>
error: src refspec <name> matches more than one
error: failed to push some refs to <Remote git url>

リモート側だとlocalのときと異なりdeleteのコマンドが同じでnameコンフリクトが発生してしまうことが原因です. 対処方法はremoteやブランチ/tag消去が考えられますが, それぞれのコマンドは以下です

1
2
3
4
5
6
7
8
9
10
## localでのbranch/tagの除去
% git tag -d <tag>
% git branch -d <branch>

## remote branch自体を消去したい場合
% git push origin :refs/heads/<branch_name>

## tagを慶したい場合
% git push origin :refs/tags/<tag_name>
% git push origin --delete refs/tags/<tag_name>

ローカルにあるbranch/tagをmergeさせたいとき

local branchでmergeを行う場合もremoteと同様の問題が以下のように発生するリスクがあります.

1
2
3
% git merge <tag or branch name>
warning: refname 'name' is ambiguous.
warning: refname 'name' is ambiguous.

この場合も, remoteのときと同様にtags/ or refs/heads/でどちらを参照しているかcommandへ明示的に情報を渡すことで解決することができます.

1
2
3
4
5
## tagをmergeさせたい場合
% git merge tags/<tag-name>

## branchをmergeさせたい場合
% git merge refs/heads/<branch-name>

Column: tagやbranchの情報をどこで管理しているのか?

gitではtagやremote, local branchの情報を.git/refs/で管理しています. そのため, refs/heads/でbranchを指定しているのかどうかを認識することができます.

1
2
3
4
5
% ls -l .git/refs/ 
total 12
drwxrwxr-x 2 kirby kirby 4096 Aug 30 11:56 heads/
drwxrwxr-x 3 kirby kirby 4096 Jul 23 04:08 remotes/
drwxrwxr-x 2 kirby kirby 4096 Jul 23 04:08 tags/


Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)