Script: *remove-tag.ps1* ======================== This PowerShell script removes a Git tag, either locally, remote, or both. Parameters ---------- ```powershell PS> ./remove-tag.ps1 [[-TagName] ] [[-Mode] ] [[-RepoDir] ] [] -TagName Specifies the Git tag name Required? false Position? 1 Default value Accept pipeline input? false Accept wildcard characters? false -Mode Specifies either locally, remote, or both Required? false Position? 2 Default value Accept pipeline input? false Accept wildcard characters? false -RepoDir Specifies the path to the Git repository Required? false Position? 3 Default value "$PWD" Accept pipeline input? false Accept wildcard characters? false [] This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. ``` Example ------- ```powershell PS> ./remove-tag v1.7 locally ``` Notes ----- Author: Markus Fleschutz | License: CC0 Related Links ------------- https://github.com/fleschutz/PowerShell Script Content -------------- ```powershell <# .SYNOPSIS Removes a Git tag (locally, remote, or both) .DESCRIPTION This PowerShell script removes a Git tag, either locally, remote, or both. .PARAMETER TagName Specifies the Git tag name .PARAMETER Mode Specifies either locally, remote, or both .PARAMETER RepoDir Specifies the path to the Git repository .EXAMPLE PS> ./remove-tag v1.7 locally .LINK https://github.com/fleschutz/PowerShell .NOTES Author: Markus Fleschutz | License: CC0 #> param([string]$TagName = "", [string]$Mode = "", [string]$RepoDir = "$PWD") try { if ($TagName -eq "") { $TagName = read-host "Enter new tag name" } if ($Mode -eq "") { $Mode = read-host "Remove the tag locally, remote, or both" } $StopWatch = [system.diagnostics.stopwatch]::startNew() if (-not(test-path "$RepoDir" -pathType container)) { throw "Can't access directory: $RepoDir" } $Null = (git --version) if ($lastExitCode -ne "0") { throw "Can't execute 'git' - make sure Git is installed and available" } if (($Mode -eq "locally") -or ($Mode -eq "both")) { "Removing local tag..." & git -C "$RepoDir" tag --delete $TagName if ($lastExitCode -ne "0") { throw "'git tag --delete' failed with exit code $lastExitCode" } } if (($Mode -eq "remote") -or ($Mode -eq "both")) { "Removing remote tag..." & git -C "$RepoDir" push origin :refs/tags/$TagName if ($lastExitCode -ne "0") { throw "'git push origin' failed with exit code $lastExitCode" } } [int]$Elapsed = $StopWatch.Elapsed.TotalSeconds "✔️ removed tag '$TagName' in $Elapsed sec" exit 0 # success } catch { "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" exit 1 } ``` *(generated by convert-ps2md.ps1 using the comment-based help of remove-tag.ps1 as of 08/15/2024 09:50:53)*