loading...

How to delete local and remote tags massively from a git repo in just one line

nahuelhds profile image Nahue Originally published at nahuelhds.dev on ・2 min read

Resultado de imagen para git

TL;DR. Give me the magic 🧙‍♂️

WARNING! This is a destructive command. Use at your own risk

Use case: you want to delete the major version 0 and its children.

First, a dry run…

SEMVER=0 && git tag | awk "/^$SEMVER.\*/ { print \\$1 }"

This way you see what you’re about to delete.

Now, if you are certain, then bring the chaos…

SEMVER=0 && git tag | awk "/^$SEMVER.\*/ { print \\$1 }" | xargs -I % sh -c "git push origin :%; git tag -d %;"

Thanos is so proud of youThanos is so proud of you

Notes

The SEMVER variable is a regular expression used inside the awk command. So if you would like to delete only the 0.1 version and its patches (0.1.1, 0.1.2, etc.), you could use SEMVER=0.1 in the command.

Windows users: you can still use GitBash.

I want the details 🤓

Let’s see the entire command again for deleting major version 0 and its children.

SEMVER=0 && git tag | awk "/^$SEMVER.\*/ { print \\$1 }" | xargs -I % sh -c "git push origin :%; git tag -d %;"

This one-line-command actually does the following things:

  1. SEMVER=0 Declaring the SEMVER variable and for later use inside the awk command.
  2. git tag Showing the available local tags in our local git repo.
  3. awk “/^$SEMVER.*/ { print \$1 }” Here we use awk for filtering all the matching versions with the regular expression defined in the SEMVER variable.
  4. xargs -I % sh -c "git push origin :%; git tag -d %;" Then, we use xargs to use the input through the percentage char (%) and combine it with the sh command. We tell to sh to read the execution from a string thanks to the-c argument. Finally, inside the string we execute the git commands to delete the tag remotely first, and then locally as well. Notice we’re using the xargs ’ input through the percentage char (%) here.

Hope it helps!

Posted on by:

nahuelhds profile

Nahue

@nahuelhds

Nerd con pretensiones. React, Python y datos abiertos #NoAlVotoElectrónico #MemoriaVerdadYJusticia

Discussion

pic
Editor guide
 

Great stuff, thanks! :)