Handy Git script February 7, 2019
Preamble
If you're working with Git, especially with the command-line interface directly, you probably find yourself executing the same series of commands fairly frequently. Whether it's rebasing a current branch, starting a new one on top of the latest version of the code or cleaning-up a local repository, developers usually learn to view these mundane tasks as a necessary evil. I was no exception.
When working on projects, I usually work in my own fork, especially when other people are involved. Therefore, when I want to create a fresh new branch, I have to go through some git commands: git checkout master
, git fetch --all
, git rebase upstream/master
, git push
(I like to keep my fork up-to-date) and git checkout -b <new branch name>
. Now, neither of these is particularly cumbersome. The whole process rarely even takes a minute. Still, it is very repetitive and a bit of a chore. One day, as I was waiting for an especially large change set to get fetched, I reflected on how ludicrous it was for me to still be doing this process "by hand". That's how I came to automate my way out of it:
Of course, as this is a fairly common problem, there are a number of similar scripts available online. Look around for the one that will make your life the easiest. Or maybe you have one of your own, or maybe you'll try your hand at it after reading this! Either way, it never hurts to look around for inspiration and seize the chance to learn something new in the process.
Usage
This is a .bat
script, so Windows users only! After downloading it, place it in a folder that's listed in your global PATH
variable to be able to use it everywhere. The script is best suited for people working in forks and using a different branch for everything. It also uses rebase
instead of merge
. Here's the full manual (also available in the script itself through the --help
flag):
usage: git.bat <command> [<flags>]
# Commands
checkout stash, fetch --all, checkout <-mlb>, rebase <-r>/<-rb>, push, checkout -b <-b>
rebase stash, fetch --all, rebase <-r>/<-rb>
squash stash, fetch --all, reset --mixed <-r>/<-rb>, add -A, commit -m <-m>
cleanup gc --quiet, remote prune origin, branch -D <pruned remote branches>, git branch -a
# Flags
-mlb Main local branch, defaults to "master"
-b Local branch, usually to be created
-r Remote from which to update, defaults to "upstream"
-rb Branch on the remote from which to update, defaults to "master"
-mb Main branch, sets the value of both the "-mlb" and "-rb" flags
-m Commit message
# Examples
git.bat checkout -b new-local-branch
git.bat rebase
git.bat squash -m "squashed commit message"
git.bat cleanup
# License
CC BY-SA 4.0, Etienne Lamoureux
https://creativecommons.org/licenses/by-sa/4.0/
Git
Last updated on September 19, 2019
— Etienne Lamoureux