npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

gitshine

v0.2.0

Published

Shine up your git commits - Interactive CLI to edit commit messages

Readme

gitshine

Shine up your git commits — Interactive CLI to edit and squash commit messages.

Features

  • 📋 Interactive commit list - Browse through recent commits with author and date info
  • ✏️ Inline editing - Edit commit messages directly in the terminal (no editor popup)
  • 🔗 Squash commits - Combine multiple commits into one with a custom message
  • 🔄 Automatic rebase - Handles git rebase complexity under the hood
  • 🌱 Root commit support - Can even edit the very first commit
  • ⚠️ Safety checks - Warns about uncommitted changes and in-progress rebases
  • 🎨 Beautiful CLI - Colorful, user-friendly interface

Installation

npm install -g gitshine

Usage

Navigate to any git repository and run:

gitshine

This opens an interactive menu where you can choose:

  • ✏️ Reword - Edit a commit message
  • 📦 Squash - Combine multiple commits into one

Options

| Option | Description | | ---------------------- | ------------------------------------------ | | -n, --number <count> | Number of commits to display (default: 20) | | -a, --all | Show all commits | | -r, --reword | Directly reword a commit (skip menu) | | -s, --squash | Directly squash commits (skip menu) | | -V, --version | Show version number | | -h, --help | Show help |

# Interactive mode (shows menu)
gitshine

# Directly reword a commit
gitshine --reword
gitshine -r

# Directly squash commits
gitshine --squash
gitshine -s

# Show last 50 commits
gitshine -n 50

# Show all commits
gitshine -a

Examples

Editing a Commit Message

$ gitshine

✨ gitshine - Shine Up Your Git Commits

? Select a commit to edit: (Use arrow keys)
❯ abc1234 Fix login bug (John, 2 hours ago)
  def5678 Add user authentication (John, 5 hours ago)
  ghi9012 Initial commit (John, 1 day ago)
  ──────────────
  Cancel

Current commit message:
  "Fix login bug"

? Enter new commit message: Fix login validation for empty passwords

New commit message:
  "Fix login validation for empty passwords"

? Are you sure you want to edit this commit message? This will rewrite history. Yes
✔ Commit message edited successfully!

To undo: git reset --hard abc1234

Note: If this branch has been pushed, you will need to force push:
  git push --force-with-lease

Squashing Commits

$ gitshine --squash

✨ gitshine - Shine Up Your Git Commits

Select commits to squash (must be consecutive):
Use ↑↓ to navigate, Space to select, Enter to confirm

? Select commits to squash:
  ◯ abc1234 WIP: almost done (John, 1 hour ago)
  ◉ def5678 WIP: more fixes (John, 2 hours ago)
  ◉ ghi9012 WIP: initial attempt (John, 3 hours ago)
  ◯ jkl3456 Add user model (John, 1 day ago)

Commits to squash (oldest to newest):
  ghi9012 WIP: initial attempt
  def5678 WIP: more fixes

? Enter squash commit message: Implement user authentication feature

Squash commit message:
  "Implement user authentication feature"

? Are you sure you want to squash 2 commits? This will rewrite history. Yes
✔ Squashed 2 commits into one!

To undo: git reset --hard abc1234

Note: If this branch has been pushed, you will need to force push:
  git push --force-with-lease

⚠️ Important: When to Use This Tool

✅ Good Use Cases

  • Personal projects
  • Solo repositories
  • Local commits not yet pushed
  • Learning/experimental repos
  • Fixing typos before pushing

❌ Bad Use Cases

  • Shared team repositories
  • Open source projects with contributors
  • Commits already pushed to remote (unless you're the only contributor)
  • Production/company projects

How It Works

Reword Mode

  1. Checks out the target commit in detached HEAD
  2. Amends the commit message
  3. Rebases all subsequent commits on top
  4. Updates your branch to the new history

This is equivalent to doing git rebase -i and marking a commit for reword, but without the manual steps.

Squash Mode

  1. Checks out the parent of the oldest selected commit
  2. Cherry-picks all selected commits without committing (stages changes)
  3. Creates a single commit with your new message
  4. Rebases any remaining commits on top
  5. Updates your branch to the new history

This is equivalent to doing git rebase -i and marking commits for squash, but without the manual steps.

Prerequisites

  • Node.js
  • Git
  • No uncommitted changes
  • No rebase in progress

Troubleshooting

"You have uncommitted changes"

git stash        # Stash changes
gitshine         # Edit commit messages
git stash pop    # Restore changes

"A rebase is already in progress"

git rebase --abort   # Cancel ongoing rebase

Undo a change

After editing, gitshine shows you the undo command:

✔ Commit message edited successfully!

To undo: git reset --hard abc1234

Just run the command shown to restore your previous state.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT © Pushkaraj Kulkarni