Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@betaorbust/github-loppers

betaorbust26Hippocratic-3.01.1.2

List or delete local squash-merged git branches. Cleans up that Github mess!

github, squashed, branch, clean

readme

Delete Squash-merged local Git Branches

NPM Version Hippocratic License HL3-FULL

Shock at "git branches"

A node utility to delete local branches that have already been merged into a mainline via the squash-merge strategy. (Frequently used on Github.)

With normal merge commits, you can run git branch --merged to get a list of already-merged branches, but with squash-merge you end up with new commits that contain your feature branch's work.

This util will find those already-squashed-and-merged branches and optionally delete them.

<summary>Explanation of what's going on under the hood</summary>
  • Gets the branch list by name
    • git for-each-ref refs/heads/ --format=%(refname:short)
  • Then for each branch found:
    • Find the ancestor commit where ThisBranch left BaseBranch
      • git merge-base <BaseBranch> <ThisBranch>
    • Get the tree ID
      • git rev-parse <ThisBranch>^{tree}
    • Make up a temporary commit with the contents ThisBranch squashed together
      • git commit-tree <TreeID> -p <AncestorSha> -m "Temp <ThisBranch>"
    • See if the temp commit contents was already applied to upstream
      • git cherry <BaseBranch> <TempPatchSha>
    • If the above output starts with - the branch is a candidate for deletion
      </details>

Usage:

By default, this utility runs in dry mode. You will be prompted if you actually want to run any destructive changes.

The easiest way to use @betaorbust/github-loppers is via NPX:

cd ~/code/myProject             # Get to your local repo
npx @betaorbust/github-loppers   # Run the utility

which will @betaorbust/github-loppers directly so you can either list out or delete your stale branches.

Demo of running "npx https://github.com/betaorbust/github-loppers"

Requirements:

  • Node >= 18.18.0
  • Git
  • That the mainline branch your checking against is checked out locally.

Acknowledgments

Git logic from @not-an-aardvark's awesome implementation.