/gitnow

Speed up your Git workflow. :tropical_fish:

Primary LanguageShellMIT LicenseMIT

GitNow Build Status Releases

Speed up your Git workflow. 🐠

GitNow contains a command set that provides high-level operations on the top of Git.
A Fish shell alternative inspired by git-friendly.

Install

With Fisher:

Stable:

fisher add joseluisq/gitnow@2.1.1

Note: Replace the number above with your preferred release.

Unstable:

fisher add joseluisq/gitnow

Commands

Command Shortcut Description
gitnow Show available commands and version info.
Git
state Alt + S Show the working tree status in a compact way.
stage Alt + E Stage files in current working directory.
unstage Ctrl + S Unstage files in current working directory.
commit Commit changes to the repository.
commit-all Ctrl + C Add and commit all changes to the repository.
pull Alt + D Pull changes from remote server but saving uncommitted changes.
push Alt + P Push commit changes to remote repository.
upstream Alt + U Commit all changes and push them to remote server.
move Moves from current branch to another but stashing your changes.
logs Alt + L Shows logs in a fancy way.
Gitflow
feature (1) Alt + F Creates a new feature (Gitflow) branch from current branch.
hotfix (1) Alt + H Creates a new hotfix (Gitflow) branch from current branch.
bugfix Creates a new bugfix (Gitflow) branch from current branch.
release Creates a new release (Gitflow) branch from current branch.
Bonus
github Clone a GitHub repository using SSH.
bitbucket Clone a Bitbucket Cloud repository using SSH.
  • (1) This command key binding will creates a new branch taking as name some text of the clipboard.

Tips

  • Skip the password request creating a SSH key for your Github or Bitbucket account.
  • SSH setup is required for using github and bitbucket commands.
  • Take adventage of keybindings in order to get faster operations.

Configuration

For a custom configuration (for example keybindings) place a .gitnow file in your home directory ~/.gitnow.

Keybindings

.gitnow file contains a [ keybindings ] section with default shortcuts (key-value pairs).

You can add, edit or remove shortcuts on demand. For custom keys run the built-in function fish_key_reader in your terminal then press the key (or key's combinations) to get the right sequence bind char(s). Finally set it to your preferred command in ~/.gitnow file.

Usage

gitnow

Show available commands and version info.

gitnow

state

Show the working tree status in compact way.

state
Current working tree status:
## master...origin/master
 M README.md
 M conf.d/gitnow.fish

stage

Stage files in current working directory.

Note: This command does git add . by default. Add your git add flags as usual to overwrite it.

# a) git add . (by default)
stage
# b) custom 1
stage README.md LICENSE.md
# c) custom 2
stage . --ignore-errors

unstage

Unstage files in current working directory.

Note: This command does git reset . by default. Add your git reset flags as usual to overwrite it.

# a) git reset . (by default)
unstage
# b) custom 1
unstage README.md LICENSE.md
# c) custom 2
unstage --soft HEAD

commit

Commit changes to the repository.

Note: This command does git commit only. Add your git commit flags as usual to overwrite it.

commit
commit README.md
commit .
commit --amend

commit-all

Add and commit all changes to the repository.

Note: This command does stage and then commit .. No flags supported.

# stage && commit .
commit-all

pull

Pull changes from remote server but saving uncommitted changes.

This command makes this for you:

  • Save your uncommitted changes locally using --autostash option.
  • Local changes you made will be rebased (---rebase option) on top of the remote changes.
  • Return your uncommitted changes locally again.

Auto mode:

  • pull
  • pull <branch_name>
  • pull <remote_origin> <branch_name>

Manual mode:

  • pull <remote_origin> <branch_name> --verbose
pull
📥 Pulling changes
Arguments mode: Auto
Default arguments: --rebase --autostash
Remote: origin (https://github.com/joseluisq/gitnow.git)
Branch: master

From https://github.com/joseluisq/gitnow
 * branch            master     -> FETCH_HEAD
Created autostash: 473315a
HEAD is now at 9de2f93 update commands
Current branch master is up to date.
Applied autostash.

push

Push commit changes to remote repository.

Note: This command is equivalent to git push --set-upstream [your arguments...].

# Auto mode (current origin and branch)
push
# Manual mode
push <origin_name> <branch_name> <--some_other_flags>

upstream

Commit all changes and push them to remote server.

Note: This command does commit-all and then push. No flags supported.

upstream

move

Switch from current branch to another but stashing uncommitted changes

Note: This command does git stash then git checkout <other_branch> and finally git stash pop. It also will make sure first that <other_branch> matchs with your existing branches. Use also -u (or --upstream) flag to fetch a remote branch.

move other_branch

# Branch `ghost_branch` was not found. No possible to switch.
move ghost_branch

# With -u flag the branch will be fetched from remote origin
move -u feature/new_remote_branch

feature

Creates a new feature (Gitflow) branch from current branch.

Note: Your new branch will always be lowercase without special characters or whitespaces (underscores instead).

feature feat1
# > feature/feat1
feature "This is my New FEATURE Branch"
# > feature/this_is_my_new_feature_branch

hotfix

Creates a new hotfix (Gitflow) branch from current branch.

Note: Your new branch will always be lowercase without special characters or whitespaces (underscores instead).

hotfix fix1
# > hotfix/fix1
hotfix "This is my New FIX Branch"
# > hotfix/this_is_my_new_fix_branch

bugfix

Creates a new bugfix (Gitflow) branch from current branch.

Note: Your new branch will always be lowercase without special characters or whitespaces (underscores instead).

bugfix fix1
# > bugfix/fix1
bugfix "This is my New bugFIX Branch"
# > bugfix/this_is_my_new_bugfix_branch

release

Creates a new release (Gitflow) branch from current branch.

Note: Your new branch will always be lowercase without special characters or whitespaces (underscores instead).

release fix1
# > release/fix1
release "This is my New release Branch"
# > release/this_is_my_new_bugfix_branch

logs

Shows logs in a fancy way.

Note: This command does git log HEAD by default using a pretty format. Add your git log flags as usual to overwrite it.

# shows all logs (default)
logs

# shows logs using git log parameters and flags (custom)
logs 8b09088
logs --before "yesterday" --after="1 week ago"

github

Clone a GitHub repository using SSH.

Examples:

github username/repo-name
github username repo-name
github repo-name # requires a `user.github` username setted

bitbucket

Clone a Bitbucket Cloud repository using SSH.

Examples:

bitbucket username/repo-name
bitbucket username repo-name
bitbucket repo-name # requires a `user.bitbucket` username setted

Note: For cloning some repo only, it's necessary to set your Github or Bitbucket username to global config before like:

# a) GitHub
git config --global user.github "your_username"
# b) Bitbucket
git config --global user.bitbucket "your_username"

Bonus

Contributions

Pull requests and issues are welcome.

License

MIT license

© 2016-present Jose Quintana