すでにプッシュされているGitタグをどのように削除しますか?
あなただけのリモートタグ名への '空の'参照をプッシュする必要があります。
git Push Origin :tagname
もっと具体的に言うと、--delete
オプション(gitのバージョンが1.8.0より古い場合は-d
)を使います。
git Push --delete Origin tagname
Gitにはタグの名前空間とブランチの名前空間があるので、ブランチとタグに同じ名前を使うことができます。タグの代わりに誤ってブランチを削除できないようにしたい場合は、full refを指定してブランチを削除しないようにすることができます。
git Push Origin :refs/tags/tagname
ローカルタグも削除する必要がある場合は、次のコマンドを使用してください。
git tag --delete tagname
ブランチ、タグ、またはその他の参照をリモートリポジトリにプッシュするには、「どのリポジトリ、どのソース、どの宛先か」を指定する必要があります。
git Push remote-repo source-ref:destination-ref
マスターブランチをOriginのマスターブランチにプッシュする実際の例は、次のとおりです。
git Push Origin refs/heads/master:refs/heads/master
これはデフォルトパスのため、以下のように短くすることができます。
git Push Origin master:master
タグは同じように機能します。
git Push Origin refs/tags/release-1.0:refs/tags/release-1.0
これは以下のように短縮することもできます。
git Push Origin release-1.0:release-1.0
ソースのref(コロンの前の部分)を省略すると、宛先に 'nothing'がプッシュされ、リモート側のrefが削除されます。
もっと簡単な方法は
git Push --delete Origin YOUR_TAG_NAME
この場合、IMOの前にコロン構文を付けるのは少し変です
あなたが削除するためのリモートタグv0.1.0
を持っていて、あなたのリモートがOrigin
であるならば、単純に:
git Push Origin :refs/tags/v0.1.0
ローカルでタグを削除する必要がある場合
git tag -d v0.1.0
削除のためのGitの変わった:
構文の説明については Adam Franco の答え を参照してください。
すべてのローカルタグを削除し、リモートタグのリストを取得する :
git tag -l | xargs git tag -d
git fetch
すべてのリモートタグを削除する
git tag -l | xargs -n 1 git Push --delete Origin
ローカルタグを整理する
git tag -l | xargs git tag -d
リモートリポジトリからタグを削除するには
git Push --delete Origin TAGNAME
ローカルでタグを削除することもできます。
git tag -d TAGNAME
あなたの端末から、これをしてください:
git fetch
git tags
git tag -d {tag-name}
git Push Origin :refs/tags/{tag-name}
今Github.comに行き、リフレッシュしなさい、それらは消える。
リモートタグという名前のリモートブランチがある場合、これらのコマンドはあいまいになります。
git Push Origin :tagname
git Push --delete Origin tagname
そのため、タグを削除するにはこのコマンドを使用する必要があります。
git Push Origin :refs/tags/<tag>
これはブランチを削除するためのものです。
git Push Origin :refs/heads/<branch>
そうでない場合は、次のようなエラーが発生します。
error: dst refspec <tagname> matches more than one.
error: failed to Push some refs to '<repo>'
Gitリポジトリにrelease01
というタグを作成した場合は、次のようにして自分のリポジトリからそれを削除します。
git tag -d release01
git Push Origin :refs/tags/release01
Mercurialリポジトリから削除するには:
hg tag --remove featurefoo
参照してください https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
11,000以上のタグを削除する必要があるときにこれらの答えを読み終えた後、私はあなたがやけどをする時間がない限り、これらの方法に頼るかxargs
が非常に長い時間がかかることを学びました。
苦労して、私は2つの ずっと より速い方法を見つけました。どちらの場合も、git tag
またはgit ls-remote --tags
で始めて、削除したいタグのリストをリモートで作成します。以下の例では、sorting_proccessing_etc
を省略または置き換えることができます(grep
ing、sort
ing、tail
ing、またはhead
ing)( 例えば grep -P "my_regex" | sort | head -n -200
etc )。
xargs
を使用するよりはるかに速い、おそらく 20から100倍 そして一度に少なくとも数個の 1,000 タグで動作します。git Push Origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
これはどのように作動しますか?通常の行区切りのタグのリストは、スペースで区切られた1行のタグに変換され、それぞれのタグの先頭には:
soが付きます。 。 。
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
このフォーマットタグと一緒にgit Push
を使用すると、 nothing が各リモート参照にプッシュされて消去されます(これをプッシュするための通常のフォーマットはlocal_ref_path:remote_ref_path
です)。
これらの方法の両方の後で、おそらくあなたのローカルタグも削除したくなるでしょう。これははるかに速いので、xargs
とgit tag -d
の使用に戻ることができますが、これで十分です。
git tag | sorting_processing_etc | xargs -L 1 git tag -d
またはリモート削除に似ています。
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
他の回答ではこれを達成する方法を指摘していますが、これはリモートリポジトリであるため、結果に注意する必要があります。
On Retagging セクションのgit tagのmanページには、リモートリポジトリの他のユーザに変更を丁寧に知らせる方法についての良い説明があります。彼らは他の人があなたの変更をどのように受けるべきかを伝えるための便利なアナウンステンプレートさえ与えます。
私はパターンにマッチするものを除いてすべてのタグを削除したかったので、最後の数ヶ月のプロダクションタグを除くすべてを削除することができました。
すべてのリモートタグを削除し、削除から表現を除外 /
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git Push --delete Origin
すべてのローカルタグを削除し、削除から表現を除外 /
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
@CubanXが示唆したように、私はこの答えを私のオリジナルのものと分けました:
xargs
より数倍速い方法で、微調整をするともっと大きくなります。これは Github API 、個人用アクセストークンを使用し、ユーティリティ parallel
を利用します。git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\" \
-H \"cache-control: no-cache\"`
parallel
には多くの操作モードがありますが、一般的にあなたがそれに与えるコマンドを並列化しながらプロセスの数に制限を設定することができます。 --jobs 2
パラメータを変更してより高速な操作を可能にすることはできますが、Githubの レート制限 に問題がありましたが、現在は5000/hrですが、文書化されていない短期制限もあります。
その後、おそらくあなたのローカルタグも削除したくなるでしょう。これははるかに速いので、xargs
とgit tag -d
の使用に戻ることができますが、これで十分です。
git tag | sorting_processing_etc | xargs -L 1 git tag -d
xargs
が既に行っていることには、多くの作業が必要です。このスレッドを振り返ってみると、あなたが経験したxargs
の遅さは、本来の答えがxargs -n 1
を実際に必要としていないときに使用していたためです。
xargs
が自動的に最大コマンドライン長を処理する点を除いて、これはあなたの方法1と同じです。
git tag | sorting_processing_etc | xargs git Push --delete Origin
xargs
はプロセスを並列に実行することもできます。 xargs
を使用した方法2:
git tag | sorting_processing_etc | xargs -P 5 -n 100 git Push --delete Origin
上記は、各プロセスで最大100個の引数を処理するために最大5つのプロセスを使用します。引数を試して自分のニーズに最も適したものを見つけることができます。
ローカルとOriginの両方の場所から特定のタグを削除するための簡単なスクリプト。タグが本当に存在するかどうかを確認します。
if [ $(git tag -l "$1") ]; then
git tag --delete $1
git Push --delete Origin $1
echo done.
else
echo tag named "$1" was not found
fi
使い方:
$> git-tag-purge.sh tag_name)
あなたがSourceTree - 素晴らしいGit GUI - を使うならば、あなたは以下をすることによってコマンドラインなしでこれを簡単にすることができます:
これで、GitHub、BitBucket、その他のリポジトリのリモートとしてリストされている場所を問わず、YOUR_TAG_NAMEがローカルリポジトリとすべてのリモートから削除されます。
また、リモートではなくローカルでタグを削除した場合は、どこでも削除する必要があります。その場合は、元のタグと同じ名前で同じコミットで添付されている新しいタグを作成します。その後、上記の手順を繰り返して、どこでも削除します。
PowerShellを使用していて、それらの束を削除したい場合は、次のようにします。
# Local tags:
git tag -l | foreach { git tag -d $_ }
# Remote tags:
git tag -l | foreach { git Push --delete Origin $_ }
もちろん、削除する前にそれらをフィルタリングすることもできます。
git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
# という文字で始まるタグを作成した場合は、 #ST002
、あなたはuが通常のパターンを使って削除することができないのを見つけるかもしれません。すなわち.
git tag -d #STOO2
タグを削除しませんが、 String Literal のようにラップします。
git tag -d "#ST002" or git tag -d '#ST002'
それはそれが削除されます。 # を使用して間違いを犯した人がタグ名を書くのを手助けすることを望んでいます。
これは、リモートで台無しにすることなくローカルでテストするためのローカルテストケースです。
~/p $ mkdir gittest
~/p/git $ cd gittest/
~/p/gittest $ git init
Initialized empty Git repository in /Users/local_user/p/gittest/.git/
~/p/gittest $ touch testfile.txt
~/p/gittest $ git add testfile.txt
~/p/gittest $ git commit -m "initial commit"
[master (root-commit) 912ce0e] initial commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testfile.txt
~/p/gittest $ git tag
~/p/gittest $ git tag -a testtag
~/p/gittest $ git tag
testtag
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
~/p/gittest $ cd ..
~/p $ mkdir gitbare
~/p $ cd gitbare
~/p/gitbare $ git init --bare
Initialized empty Git repository in /Users/local_user/p/gitbare/
~/p/gitbare $ cd ..
~/p $ cd gittest/
~/p/gittest $ git remote add Origin /Users/local_user/p/gitbare
~/p/gittest $ git Push -u Origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'Origin'.
~/p/gittest $ git Push Origin testtag
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 163.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
* [new tag] testtag -> testtag
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/Origin/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
~/p/gittest $ git Push -d Origin testtag
To /Users/local_user/p/gitbare
- [deleted] testtag
~/p/gittest git tag -d testtag
Deleted tag 'testtag' (was b0a6c15)
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/Origin/master
~/p/gittest
git tag -d your_tag_name
git Push Origin :refs/tags/your_tag_name
1行目はyour_tag_name
をローカルレポジトリから削除し、2行目はそれをリモートレポジトリから削除します。これでyour_tagはローカルとリモートの両方のリポジトリから完全に削除されましたが、時にはあなたのリリースセクションで手動でGitHubによって作成された削除されたタグを削除する必要があるかもしれません。
こんにちはちょうど私が作成したエイリアスを共有したいと思いました。それは同じことをします:
以下を〜/ .gitconfigに追加してください。
[alias]
delete-tag = "!f() { \
echo 'deleting tag' $1 'from remote/Origin ausing command: git Push --delete Origin tagName;'; \
git Push --delete Origin $1; \
echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
git tag -d $1; \
}; f"
使い方は次のようになります。
-->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/Origin ausing command: git Push --delete Origin tagName;
To https://github.com/jsticha/pafs
- [deleted] v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)