GIT-RELEASE(1)

πŸ’– git-release β€” the manual page, bestie edition πŸ’–

okay so this is GIT-RELEASE(1), from the Git Extras collection (yes that's the manual name, it's giving very fancy). pull up a chair, we're committing, tagging and pushing, and it's gonna slay. πŸŽ€


πŸ¦‹ NAME πŸ¦‹

git-release β€” commit, tag and push changes to the repository

like, all three. in one go. no cap. ✨


🌸 SYNOPSIS 🌸

okay so bestie, the original page literally left this section blank πŸ’€ no synopsis line, nothing. so just scroll down to OPTIONS and EXAMPLES, that's where the actual tea is. πŸ™ˆ


πŸ’… DESCRIPTION πŸ’…

So here's the vibe. It commits your changes with the message "Release <tagname>" β€” or with custom commit info if you're feeling quirky β€” then it tags with the given <tagname>, then it pushes the branch / tags. done. iconic. πŸ‘‘

This command always creates a release commit, which could be totally empty if nothing changed. it works like git merge --no-ff, fr fr. and if that behavior isn't your thing? you can add --no-empty-commit to skip it. simple as.

Optionally it generates a changelog (see git-changelog) and a remote can be defined. and here's the fun part: the order of first -c or -r does not matter. mix and match, she doesn't care. 🫢

and if .git/hooks/pre-release or .git/hooks/post-release exist, they will be triggered with tagname and extra hook arguments before/after the release. hooks girlies stay winning. 🧚


✨ OPTIONS ✨

okay this is the main character section, let's go one by one, no skipping, I know every single one πŸ”₯

  • --semver <name> β€” if the latest tag in your repo matches the semver format requirement, you could increase part of it as the new release tag with this option. The name must be one of the major, minor, patch. For example, assumed the latest tag is 4.4.0, with git release --semver minor you will make a new release with tag 4.5.0. and if your tag has a character before the semver, use --prefix. πŸ’«
  • <tagname> β€” The name of the newly created tag. Also used in the tag comment. so it's doing double duty, we love a multitasker. πŸ’…
  • --prefix <tag prefix> β€” use a prefix with a semver tag. git release --semver minor --prefix r would increment the latest tag r4.4.0 to r4.5.0. This prefix can be any length, just without spaces. ok? no spaces. periodt. 🌈
  • -r <remote> β€” The "remote" repository that is destination of a push operation: it is passed to git push. so you tell it where to yeet the code. πŸš€
  • -m <commit info> β€” use the custom commit information instead of the default message "Release <tagname>". you wanna write your own little love letter to the commit log? go off. πŸ’Œ
  • --no-empty-commit β€” avoid creating empty commit if nothing could be committed. bye bye ghost commit πŸ‘»
  • -c β€” generates or populates the changelog with all commit message since the last tag. For more info see git-changelog.. (yes, two dots in the original, I'm keeping it exactly, don't come for me 😭)
  • -s β€” create a signed and annotated tag. secure and cute, the best combo. πŸ”
  • -u <key-id> β€” create a tag, annotated and signed with the given key. you pick the key, she does the signing. πŸ”‘
  • [--] hook arguments... β€” the arguments listed after the -- separator will be passed to pre/post-release hook following the tagname. so -- is like the velvet rope, everything after it goes straight to the hooks. 🎟️

πŸ“ EXAMPLES πŸ“

live footage of you being a git legend, let's run through all of them bestie:

  1. Release commit with the given <tagname>.
$ git release 0.1.0
  1. Release commit with the given <tagname> and custom commit message.
$ git release 0.1.0 -m "+ powerful feature added."
  1. Release commit with the given <tagname> and push to specific remote.
$ git release 0.1.0 -r github
  1. Release commit with the given <tagname> and populate changelog.
$ git release 0.1.0 -c
  1. Release commit with the given <tagname>, populate changelog, and push to specific remote.
$ git release 0.1.0 -r github -c
  1. Release commit with the given <tagname>, pass <tagname> and extra argument to release hook, populate changelog, and push to specific remote.
$ git release 0.1.0 -r github -c -- --signature-required

see that last one? hook args AND changelog AND remote? that's the full glow-up. πŸ’–


πŸ‘‘ AUTHOR πŸ‘‘

Written by Tj Holowaychuk <tj@vision-media.ca> Extended by David Hartmann <dh@tsl.io>

absolute legends, we stan. πŸ™‡β€β™€οΈ


😭 REPORTING BUGS 😭

found a bug? don't suffer in silence bestie, tell them here:

<https://github.com/tj/git-extras/issues>


πŸ”₯ SEE ALSO πŸ”₯

<https://github.com/tj/git-extras>

go explore, there's a whole extras ecosystem waiting for you. 🌈


πŸ’œ one last thing, bestie: git-release is part of Git Extras, and this page is the GIT-RELEASE(1) entry dated May 2026. that's a wrap, girlies. slay, tag, push. βœ¨πŸ’…πŸ¦‹
πŸ“¦ where this page comes from