gitkit is a small ’n simple set of git bash aliases & functions, to help ease the pain of git's rather verbose command line interface, to let you fly around in git like a bat on steroids. 🦇
bash install.shOr for unattended install:
bash install.sh ~/.profile # Specify your bash profile file path up-front$ gts
On branch master
Your branch is up to date with 'origin/master'.
$ gts src
On branch integration
Your branch is up to date with 'origin/integration'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: main.c$ gch my-branch
Switched to branch 'my-branch'$ gch . # Discard all unstaged changes since parent commit
$ gch -- index.js # Discard changes to index.js since parent commitgch has two variants for common branch names integration and master:
$ gchi
Switched to branch 'integration'$ gchm
Switched to branch 'master'You almost always want the options --all --prune, so that's what gf does.
Note: for safety, you should usually gf and gts before you gtp.
$ gf
Fetching origin...
From github.com:<x>
c7982c0d3..c3dbd0648 integration -> origin/integration
* [new branch] my-branch -> origin/my-branch$ gtp
Updating c7982c0d3..c3dbd0648
Fast-forward
src/blog.js | 3 ++-
src/header.js | 12 ++++++++++++------$ gtl
--- a/src/index.js
+++ b/src/index.js
@@ -2,3 +2,4 @@
+import './math';
gtl has variants for showing only cached changes (git diff --cached):
$ gtlc
diff --git a/index.js b/index.js
index 348ab52..d528d10 100644
--- a/index.js
+++ b/index.js
@@ -20,6 +20,13 @@
- const animation_speed = 10;
+ const animation_speed = 20;And file status changes: (git diff --name-status):
$ gtln
D assets/settings.svg
M index.js$ gh c1bf9dff9
--- a/alphabet.js
+++ b/alphabet.js
@@ -137,3 +137,16 @@
function b() {
- return 'c';
+ return 'b';
}When called with no argument, gh diffs HEAD with HEAD^.
gad adds everything under the current directory, and uses -u to include file deletions. It calls gts afterwards, to show you what you've got staged.
$ gad
On branch integration
Your branch is up to date with 'origin/integration'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: index.jsgadn includes -N and adds new files to the index but doesn't stage them:
$ touch file.js
$ gadn
On branch integration
Your branch is up to date with 'origin/integration'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
new file: file.jsgcom takes the commit message as the full string of its arguments:
$ gcom add a new file
[integration 34df9305d] add a new file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 x.jsMake sure to use quotes if your commit message includes special characters like &:
$ gcom 'add new.js & delete old.js'gm includes --no-ff --no-commit.
You should always merge in two stages: gm, then gcom.
$ gchi
Switched to branch 'integration'
Your branch is up to date with 'origin/integration'.
$ gm text-util-update
Automatic merge went well; stopped before committing as requested
$ gts
On branch integration
Your branch is up to date with 'origin/integration'.
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
modified: classes/utils/text.php
$ gcom merge branch text-util-update
[integration 311d38891] merge branch text-util-update
👍List all branches.
$ gb
$ gb | grep hotfixDelete branches. The D is capitalised to avoid accidental usage.
$ gD my-branch
Deleted branch my-branch (was c3dbd0648).gDmerged is a variant to delete all local branches that are merged from the point of view of HEAD:
$ gDmerged
Deleted branch my-branch (was c7982c0d3)....and gDall deletes all unmerged local branches (you could hurt yourself with this, but it will skip unmerged branches without remotes, so probably not too badly):
$ gDall
Deleted branch a-feature (was 0ca561f41).
error: The branch 'another-feature' is not fully merged.
If you are sure you want to delete it, run 'git branch -D another-feature'.Rename the current branch.
$ gch temp-branch
$ gbm my-featuregtt displays ‘traintracks view’:
$ gtt
* c3dbd0648 (HEAD -> integration, origin/integration) prod build
* aa795e9d1 WBT-2287: add natural height opt to cd hero
* db259e9d0 Noindex all blog archives except author
| * 1fb6c8b11 (temp-text-helper-improvements) helper func improvements: initial work
| | * cb94cc365 (origin/custom-cta) new custom button text field
| | * c6e7bd2b2 enable custom text on ctas
| |/
|/|
* | 12aab6354 only output images if required data is present
|/
* c7982c0d3 minor routing fix
*
...gtts (for ‘single’) is a variant that only includes the history that has been merged into HEAD.
The fastest way to push.
$ gpoh
Counting objects: 2, done.
...
To github.com:bhallstein/gitkit.git
c3dbd0648..b8b86da89 HEAD -> my-branchgpohu is a variant that sets the upstream tracking reference. It's often a good idea to use gpohu when pushing a newly created branch:
$ gch -b my-branch
Switched to a new branch 'my-branch'
$ gpohu
To github.com:bhallstein/gitkit.git
* [new branch] HEAD -> my-branch
Branch 'my-branch' set up to track remote branch 'my-branch' from 'origin'.For the rebaser.
gr <a> <b> <c> rebases commits ranging [b to c] onto a. (git rebase --onto a b c).
gri <a> <b> <c> as gr, but with --interactive
$ gr origin/utils c3dbd0648 text-utils
First, rewinding head to replay your work on top of it...
Applying: initial work
...grc calls git rebase --continue, for when you have finished fixing conflicts during a rebase.
Removes untracked files. (Note: you could lose work if you meant to gcom those files!)
$ touch my-file
$ gcl
Removing my-file