A zsh plugin that packages some extra git helper scripts I've found. I only wrote a few of these scripts, and the ones I didn't each have whatever licensing is included in the file.
This collection doesn't actually require zsh, but packaging it as a ZSH plugin makes it more convenient for people using a ZSH framework to use this collection.
If you wrote one of these scripts and want it removed from this collection, please either make a PR and/or file an issue against the repo and I will remove it.
Table of Contents generated with DocToc
A relatively recent version of git. The version of git Apple includes in OS X is stale. brew install git
if you're on OS X.
If you're using Antigen:
- Add
antigen bundle unixorn/git-extra-commands
to your.zshrc
where you've listed your other plugins. - Close and reopen your Terminal/iTerm window to refresh context and use the plugin. Alternatively, you can run
antigen bundle unixorn/git-extra-commands
in a running shell to have antigen load the new plugin.
If you're using oh-my-zsh:
-
In the command line, change to oh-my-zsh's custom plugin directory :
cd ~/.oh-my-zsh/custom/plugins/
-
Clone the repository into a new
git-extra-commands
directory:git clone https://github.com/unixorn/git-extra-commands.git git-extra-commands
-
Edit your
~/.zshrc
and addgit-extra-commands
– same as clone directory – to the list of plugins to enable:plugins=( ... git-extra-commands )
-
Then, restart your terminal application to refresh context and use the plugin. Alternatively, you can source your current shell configuration:
source ~/.zshrc
If you're using zgen:
- Add
zgen load unixorn/git-extra-commands
to your.zshrc
along with your otherzgen load
commands. zgen reset && zgen save
Nothing here actually requires you to use ZSH or zgen, that's just a convenient distribution method for anyone using a ZSH framework.
If you aren't using any zsh frameworks, or if you're a bash user, do the following steps:
- git clone this repository
- Add
cloneDirectory/bin
to your$PATH
.
-
awesome-github - Faraz Fallahi maintains a curated list of Github & Git resources.
-
Scott Chacon's Pro Git book is a great resource for getting more out of git.
-
Zach Dennis has a great blog post - it's worth reading on it's own, but here are a couple of good sites I found through it:
- gitready.com/ is another great reference which has been collecting information and tips for git since 2009.
- gitimmersion.com/
-
There’s a quick Introduction to git on learnxinyminutes.com
-
There's a more detailed git tutorial on learnenough.com
-
Kate Hudson maintains the git flight rules collection of useful git usage tips.
-
git-tips/tips is a collection of git tips
-
Mislav Marohnić has a good article on git tips on his blog. Several of his git scripts are in this collection.
- bfg repo-cleaner - Removes large or troublesome blobs like git-filter-branch does, but faster.
- bitbucket-git-helpers - Helper scripts to allow you to create bitbucket PRs from a shell session.
- blackbox - Tom Limoncelli open sourced the tool they use at Stack Exchange to use GPG to store secrets in a git repository.
- branch-manager - ZSH plugin for branch management
- diff-so-fancy - Better looking git diffs
- git-aliases.zsh - Peter Hurford's git plugin which you may prefer to the git plugin from oh-my-zsh.
- git-also - Shows what files are most often committed with a given file in the repository.
- git-amend - Bash script to amend older commits with staged changes.
- git-branch-status - A git utility to make managing large number of branches either across many remotes easier. Branch status allows comparing all branches against their upstream or any arbitrary branch to show the number of commit differences.
- git-branches - Prints the commit behind/ahead counts for branches
- git-chart - python script that builds charts from a git repository
- git-diffall - Provides a directory based diff mechanism for git.
- git-fastclone - Think
git clone --recursive
on steroids. If you're doing repeated checkouts of a given repo on a machine (like a ci box), git-fastclone will speed things up considerably. - git-flow-completion - Bash, Fish and Zsh completion support for git-flow
- git-graph - creates a Graphviz graph showing the high-level structure of a repository's history.
- git-gutter - Plugin for Sublime Text 2/3 to display the git diff in the edit window gutter.
- git-it-on.zsh - Another plugin by Peter Hurford that adds a gitit command that will open your current directory on github, in your current branch.
- git-quick-stats - A simple and efficient way to access various statistics in git repository
- git-secrets - Prevents you from committing secrets and credentials into git repositories.
- git-standup - Recall what you did on the last working day. Can work in a directory full of git repos to see a consolidated view of all work in all the repos.
- git-submodule-tools - A collection of scripts that should help make life with git submodules easier.
- git-sweep - A utility script to remove branches that have been merged to master.
- git-todo - helper script to show all the todo entries in your repo.
- git-up (python) - Python implementation of Aanand's original ruby gem
- git-up - Fetch and rebase all locally-tracked remote branches.
- git-wayback-machine - A simple script to quickly navigate a project's state through it's GIT history
- git_history_visualizer - python script to visualize the history of files in a git repository
- gitbaby - Helper scripts to manage your git repositories
- gitsh - An interactive shell for git. From within gitsh you can issue any git command, even using your local aliases and configuration.
- hub - A command line tool that wraps git in order to extend it with extra features and commands that make working with GitHub easier.
Script | Original Source | Description |
---|---|---|
git-big-file |
Mislav Marohnić's dotfiles | Show files in the repo larger than a threshold size |
git-change-author |
Michael Demmer in jut-io/git-scripts | Change one author/email in the history to another |
git-change-log |
John Wiegley's git-scripts | turn git log output into a complete Changelog for projects that haven't been maintaining one |
git-changes |
Michael Markert's dotfiles | List authors in the repo in descending commit-count order |
git-churn |
Gary Bernhardt's dotfiles | Show which files are getting changed most often in the repository |
git-clone-subset |
Rodrigo Silva (MestreLion) [email protected] | Uses git clone and git filter-branch to remove from the clone all files but the ones requested, along with their associated commit history. |
git-copy-branch-name |
Zach Holman's dotfiles | Copy the current branch name to the clipboard (OS X Only) |
git-credit |
Zach Holman's dotfiles | Quicker way to assign credit to another author on the latest commit |
git-cut-branch |
Ryan Tomayko's dotfiles | Create a new branch pointed at HEAD and reset the current branch to the head of its tracking branch |
git-delete-local-merged |
@tekkub | Delete all local branches that have been merged into HEAD |
git-delete-merged-branches |
? | Purges all branches that have been merged to a target branch (defaults to branches merged to master) |
git-delete-tag |
Joe Block [email protected] | Delete a tag, both locally and from the origin remote |
git-divergence |
Gary Bernhardt's dotfiles | Shows differences between local branch and its tracking branch |
git-edit-conflicts |
Joe Block [email protected] | Edit the files that are marked as conflicted during a merge/rebase in your $EDITOR/$VISUAL |
git-find-dirty |
Matthew McCullough's scripts repository | |
git-flush |
John Wiegley's git-scripts | Compact your reposistory by dropping all reflogs, stashes, and other cruft that may be bloating your pack files |
git-force-mtimes |
John Wiegley's git-scripts | Sets mtimes of all files in the reprository their last change date based on git's log. Useful to avoid too new dates after a checkout. |
git-forest |
Jan Engelhardt | Prints a text-based tree visualisation of your repository |
git-git |
Joe Block [email protected] | Typing git git foo will make git do a git foo instead of complaining |
git-github-open |
? | Open GitHub file/blob page for FILE on LINE |
git-ignored |
? | Show files being ignored by git in the repo |
git-improved-merge |
Mislav Marohnić's dotfiles | Sophisticated git merge with integrated CI check and automatic cleanup |
git-incoming |
Michael Markert's dotfiles | Show commits in the tracking branch that are not in the local branch |
git-incoming-commits |
Ryan Tomayko's dotfiles | Adds a remote for the current repository for the given github username |
git-ls-object-refs |
Ryan Tomayko's dotfiles | Find references to an object with SHA1 in refs, commits, and trees. All of them. |
git-maxpack |
John Wiegley's git-scripts | Compress a repo's pack files as much as possible |
git-move-commits |
Corey Oordt's git-scripts | git move-commits num-commits correct-branch moves the last n commits to correct-branch (creating it if necessary) |
git-nuke |
Zach Holman's dotfiles | Nukes a branch locally and on the origin remote |
git-object-deflate |
Ryan Tomayko's dotfiles | Deflate an loose object file and write to standard output |
git-outgoing |
Michael Markert's dotfiles | Show commits that are on the local branch that have not been pushed to the tracking branch |
git-overwritten |
Mislav Marohnić's dotfiles | Aggregates git blame information about original owners of lines changed or removed in the '...' diff. |
git-pie-ify |
JeeBak Kim's gist | git pie-ify pattern replacement |
git-plotrepo |
Matthew McCullogh's scripts collection | Uses dot to draw a graph of the repository |
git-promote |
Trevor's Improving My git Workflow blog post (404 now) | Promotes a local topic branch to a remote tracking branch of the same name |
git-prune-branches |
Michael Demmer in jut-io/git-scripts | Deletes each fully merged branch after prompting for confirmation, than asks if you want the deleted branches deleted from your upstream remotes |
git-pruneall |
Ryan Tomayko's dotfiles | Prune branches from specified remotes, or all remotes when no remote is specified |
git-publish |
Michael Markert's dotfiles | `git publish remote [remote-branch]`` |
git-purge-from-history |
David Underhill’s blog | Script to permanently delete files/folders from your git repository |
git-pylint |
Joe Block [email protected] | Runs pylint on any .py files modified or added in the git status output |
git-rank-contributors |
William Morgan [email protected] | Rummages through the changelog and orders contributors by the size of the diffs they're responsible for |
git-rebase-authors |
Mislav Marohnić's dotfiles | Adds authorship info to interactive git rebase output |
git-rebase-theirs |
Rodrigo Silva (MestreLion) [email protected] | Resolve rebase conflicts by favoring 'theirs' version |
git-recently-checkedout-branches |
Mislav Marohnić's dotfiles | Shows timestamp and name of recently checked-out branches in reverse chronological order |
git-rel |
Ryan Tomayko's dotfiles | Shows the relationship between the current branch and ref>*. With no ref, the current branch's remote tracking branch is used |
git-related |
Mislav Marohnić's dotfiles | Show other files that often get changed in commits that touch <file> |
git-reset-with-fire |
Joe Block [email protected] | Hard reset the working directory, then zap any files not in git |
git-restore-mtime |
Rodrigo Silva (MestreLion) [email protected] | Change mtime of files based on commit date of last change |
git-root-directory |
Joe Block [email protected] | Prints the root of the git repository you're in |
git-run-command-on-revisions |
Gary Bernhardt's dotfiles | Runs a given command over a range of Git revisions |
git-shamend |
Danielle Sucher's git-shamend blog post | Amends your staged changes as a fixup (keeping the pre-existing commit message) to the specified commit, or HEAD if no revision is specified |
git-show-overwritten |
Mislav Marohnić's dotfiles | Aggregates git blame information about the original owners of lines changed or removed in the '...' diff. |
git-submodule-rm |
Greg V's dotfiles | Allows you to remove a submodule easily with git submodule-rm path/to/submodule |
git-thanks |
Mislav Marohnić's dotfiles | List the contributors to a repository in descending commit order, even if their contribution has been completely replaced |
git-track |
Zach Holman's dotfiles | Sets up your branch to track a remote branch. Assumes you mean origin/localbranchname |
git-trail |
Daniel Hahler's dotfiles | Show all branching points in the repo's Git history |
git-undo-push |
? | Undoes your last push to branch ($1) of origin |
git-unpushed |
Zach Holman's dotfiles | Show the diff of everything you haven't pushed to the origin remote yet |
git-unreleased |
Mislav Marohnić's dotfiles | Shows git commits since the last tagged version |
git-up |
Ryan Tomayko's dotfiles | |
git-upstream-sync |
Joe Block [email protected] | Fetches upstream/yourforkname and rebases into your local fork, then pushes to your origin |
git-when-merged |
Michael Haggerty git-when-merged | Find when a commit was merged into one or more branches |
git-where |
Mislav Marohnić's dotfiles | Shows where a particular commit falls between releases |
git-winner |
Garry Dolley https://github.com/up_the_irons/git-winner | Shows what authors have made the most commits, both by number of commits and by number of lines changed |
git-wtf |
William Morgan | git-wtf displays the state of your repository in a readable, easy-to-scan format. It's useful for getting a summary of how a branch relates to a remote server, and for wrangling many topic branches. |
github-open |
Ryan Tomayko's dotfiles |
Here are some helpful aliases for your ~/.gitconfig
alias | Description |
---|---|
ahead-of-master = log --oneline origin/master..HEAD |
Show commits that haven't made it to master yet |
wip = rebase -i @{u} |
Starts an interactive rebase of all the commits you haven't pushed yet. Handy for collapsing a bunch of WIP snapshots into logical commits before pushing, without having to worry about accidentally squashing a commit someone else has already referred to |
- Please include an entry in the credits section of README.md for any scripts in your PRs so authors get their work credited correctly.
- Please use
#!/usr/bin/env interpreter
instead of a direct path to the interpreter, this makes it easier for people to use more recent versions when the ones packaged with their OS (OS X and CentOS, I'm looking at you) are stale.