forgit
is a utility tool powered by fzf for using git interactively.
Make sure you have fzf
installed.
Run the following command in your shell to try forgit
without installing:
source <(curl -Ss https://raw.githubusercontent.com/wfxr/forgit/master/forgit.plugin.zsh)
source (curl -Ss https://raw.githubusercontent.com/wfxr/forgit/master/forgit.plugin.fish | psub)
zplug 'wfxr/forgit'
zgen load 'wfxr/forgit'
antigen bundle 'wfxr/forgit'
Download and source forgit.plugin.zsh
, forgit.plugin.sh
, or forgit.plugin.fish
in your shell config.
Interactive git add
selector
Interactive git log
viewer
Interactive .gitignore
generator
Interactive git diff
viewer
Interactive git reset HEAD <file>
selector
Interactive git checkout <file>
selector
Interactive git stash
viewer
Interactive git clean
selector
Keybind | Action |
---|---|
Enter | Confirm |
Tab | Toggle mark |
? | Toggle preview window |
Alt - W | Toggle preview wrap |
Ctrl - S | Toggle sort |
Ctrl - R | Toggle selection |
Ctrl - K / P | Selection move up |
Ctrl - J / N | Selection move down |
Alt - K / P | Preview move up |
Alt - J / N | Preview move down |
You can change the default aliases by defining these variables below.
(To disable all aliases, Set the FORGIT_NO_ALIASES
flag.)
# Define them before sourcing the plugin if you don't use any plugin manager.
forgit_log=glo
forgit_diff=gd
forgit_add=ga
forgit_reset_head=grh
forgit_ignore=gi
forgit_restore=gcf
forgit_clean=gclean
forgit_stash_show=gss
You can add default fzf options for forgit
, including keybinds, layout, etc.
(No need to repeat the options already defined in FZF_DEFAULT_OPTS
)
FORGIT_FZF_DEFAULT_OPTS="
--exact
--border
--cycle
--reverse
--height '80%'
"
Customizing fzf options for each command individually is also supported:
Command | Option |
---|---|
ga |
FORGIT_ADD_FZF_OPTS |
glo |
FORGIT_LOG_FZF_OPTS |
gi |
FORGIT_IGNORE_FZF_OPTS |
gd |
FORGIT_DIFF_FZF_OPTS |
grh |
FORGIT_RESET_HEAD_FZF_OPTS |
gcf |
FORGIT_CHECKOUT_FZF_OPTS |
gss |
FORGIT_STASH_FZF_OPTS |
gclean |
FORGIT_CLEAN_FZF_OPTS |
The complete loading order of fzf options is:
FZF_DEFAULT_OPTS
(fzf global)FORGIT_FZF_DEFAULT_OPTS
(forgit global)FORGIT_CMD_FZF_OPTS
(command specific)
Example
// adds a keybind to drop the selected stash but do not quit fzf
FORGIT_STASH_FZF_OPTS='
--bind="ctrl-d:reload(git stash drop $(cut -d: -f1 <<<{}) 1>/dev/null && git stash list)"
'
-
diff-so-fancy
ordelta
: Improve thegit diff
output. -
bat
: Syntax highlighting forgitignore
. -
emoji-cli
: Emoji support forgit log
.
- Hit
q
to quit from full screen preview any time. - Commands like
glo
,gd
,gcf
andgclean
accept path arguments to restrain the items listed in fzf(eg,glo main.go test.go
,gclean output/
). gd
supports specifying revision(eg,gd HEAD~
,gd v1.0 README.md
).- Call
gi
with arguments to get the wanted.gitignore
contents directly(eg,gi cmake c++
).
MIT (c) Wenxuan Zhang