Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Forgit | 3,800 | 11 days ago | 8 | mit | Shell | |||||
:zzz: A utility tool powered by fzf for using git interactively. | ||||||||||
Dotbare | 497 | 8 months ago | 6 | mit | Shell | |||||
Manage dotfiles and any git directories interactively with fzf | ||||||||||
Fzf Scripts | 329 | 7 months ago | 9 | gpl-3.0 | Shell | |||||
a collection of scripts that rely on https://github.com/junegunn/fzf | ||||||||||
Dotfiles | 312 | a month ago | 2 | mit | Shell | |||||
:penguin: Simple, fast, productivity-increaser dotfiles | ||||||||||
Black Void Zsh | 310 | 10 months ago | 4 | mit | Shell | |||||
🔮 Awesome, Customable Zsh Starter Kit 🌠🌠 | ||||||||||
Dotfiles | 296 | a day ago | 19 | Lua | ||||||
mac OS, Arch Linux, and Debian/Ubuntu | ||||||||||
Git Workspace | 218 | 14 days ago | 30 | December 11, 2022 | 4 | mit | Rust | |||
Sync personal and work git repositories from multiple providers :rocket: | ||||||||||
Fzf Checkout.vim | 189 | 3 months ago | 5 | mit | Vim Script | |||||
Manage branches and tags with fzf | ||||||||||
Fzf Extras | 175 | 3 months ago | 1 | mit | Shell | |||||
Key bindings from fzf wiki | ||||||||||
Fzf Zsh Completions | 102 | 2 days ago | 1 | mit | Shell | |||||
Fuzzy completions for fzf and Zsh (git, kubectl, docker, ...) |
Utility tool for using git interactively. Powered by junegunn/fzf.
This tool is designed to help you use git more efficiently. It's lightweight and easy to use.
Make sure you have fzf
installed.
# for zplug
zplug 'wfxr/forgit'
# for zgen
zgen load 'wfxr/forgit'
# for antigen
antigen bundle 'wfxr/forgit'
# for fisher (requires fisher v4.4.3 or higher)
fisher install wfxr/forgit
# for omf
omf install https://github.com/wfxr/forgit
# for zinit
zinit load wfxr/forgit
# for oh-my-zsh
git clone https://github.com/wfxr/forgit.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/forgit
# manually
# Clone the repository and source it in your shell's rc file or put bin/git-forgit into your $PATH
Fig adds apps, shortcuts, and autocomplete to your existing terminal.
Install forgit
in just one click.
git add
selector (ga
)git log
viewer (glo
)The log graph can be disabled by option FORGIT_LOG_GRAPH_ENABLE
(see discuss in issue #71).
.gitignore
generator (gi
)Interactive git diff
viewer (gd
)
Interactive git reset HEAD <file>
selector (grh
)
Interactive git checkout <file>
selector (gcf
)
Interactive git checkout <branch>
selector (gcb
)
Interactive git branch -D <branch>
selector (gbd
)
Interactive git checkout <tag>
selector (gct
)
Interactive git checkout <commit>
selector (gco
)
Interactive git revert <commit>
selector (grc
)
Interactive git stash
viewer (gss
)
Interactive git stash push
selector (gsp
)
Interactive git clean
selector (gclean
)
Interactive git cherry-pick
selector (gcp
)
Interactive git rebase -i
selector (grb
)
Interactive git blame
selector (gbl
)
Interactive git commit --fixup && git rebase -i --autosquash
selector (gfu
)
Key | Action |
---|---|
Enter | Confirm |
Tab | Toggle mark and move up |
Shift - Tab | Toggle mark and move down |
? | Toggle preview window |
Alt - W | Toggle preview wrap |
Ctrl - S | Toggle sort |
Ctrl - R | Toggle selection |
Ctrl - Y | Copy commit hash/stash ID* |
Ctrl - K / P | Selection move up |
Ctrl - J / N | Selection move down |
Alt - K / P | Preview move up |
Alt - J / N | Preview move down |
* Available when the selection contains a commit hash or a stash ID.
For linux users FORGIT_COPY_CMD
should be set to make copy work. Example: FORGIT_COPY_CMD='xclip -selection clipboard'
.
Options can be set via environment variables. They have to be exported in
order to be recognized by forgit
.
You can change the default aliases by defining these variables below.
(To disable all aliases, Set the FORGIT_NO_ALIASES
flag.)
forgit_log=glo
forgit_diff=gd
forgit_add=ga
forgit_reset_head=grh
forgit_ignore=gi
forgit_checkout_file=gcf
forgit_checkout_branch=gcb
forgit_branch_delete=gbd
forgit_checkout_tag=gct
forgit_checkout_commit=gco
forgit_revert_commit=grc
forgit_clean=gclean
forgit_stash_show=gss
forgit_stash_push=gsp
forgit_cherry_pick=gcp
forgit_rebase=grb
forgit_blame=gbl
forgit_fixup=gfu
You can use forgit as a subcommand of git by making git-forgit
available in $PATH
:
# after `forgit` was loaded
export PATH="$PATH:$FORGIT_INSTALL_DIR/bin"
Some plugin managers can help do this.
Then any forgit command will be a subcommand of git:
git forgit log
git forgit add
git forgit diff
Optionally you can add aliases in git:
git config --global alias.cf 'forgit checkout_file'
And use forgit functions via a git alias:
git cf
If you want to customize git
's behavior within forgit there is a dedicated variable for each forgit command.
These are passed to the according git
calls.
Command | Option |
---|---|
ga |
FORGIT_ADD_GIT_OPTS |
glo |
FORGIT_LOG_GIT_OPTS |
gd |
FORGIT_DIFF_GIT_OPTS |
grh |
FORGIT_RESET_HEAD_GIT_OPTS |
gcf |
FORGIT_CHECKOUT_FILE_GIT_OPTS |
gcb |
FORGIT_CHECKOUT_BRANCH_GIT_OPTS |
gbd |
FORGIT_BRANCH_DELETE_GIT_OPTS |
gct |
FORGIT_CHECKOUT_TAG_GIT_OPTS |
gco |
FORGIT_CHECKOUT_COMMIT_GIT_OPTS |
grc |
FORGIT_REVERT_COMMIT_GIT_OPTS |
gss |
FORGIT_STASH_SHOW_GIT_OPTS |
gsp |
FORGIT_STASH_PUSH_GIT_OPTS |
gclean |
FORGIT_CLEAN_GIT_OPTS |
grb |
FORGIT_REBASE_GIT_OPTS |
gbl |
FORGIT_BLAME_GIT_OPTS |
gfu |
FORGIT_FIXUP_GIT_OPTS |
gcp |
FORGIT_CHERRY_PICK_GIT_OPTS |
Forgit will use the default configured pager from git (core.pager
,
pager.show
, pager.diff
) but can be altered with the following environment
variables:
Use case | Option | Fallbacks to |
---|---|---|
common pager | FORGIT_PAGER |
git config core.pager or cat
|
pager on git show
|
FORGIT_SHOW_PAGER |
git config pager.show or $FORGIT_PAGER
|
pager on git diff
|
FORGIT_DIFF_PAGER |
git config pager.diff or $FORGIT_PAGER
|
pager on git blame
|
FORGIT_BLAME_PAGER |
git config pager.blame or $FORGIT_PAGER
|
pager on gitignore
|
FORGIT_IGNORE_PAGER |
bat -l gitignore --color always or cat
|
git log format | FORGIT_GLO_FORMAT |
%C(auto)%h%d %s %C(black)%C(bold)%cr%reset |
You can add default fzf options for forgit
, including keybinds, layout, etc.
(No need to repeat the options already defined in FZF_DEFAULT_OPTS
)
export 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_FILE_FZF_OPTS |
gcb |
FORGIT_CHECKOUT_BRANCH_FZF_OPTS |
gbd |
FORGIT_BRANCH_DELETE_FZF_OPTS |
gct |
FORGIT_CHECKOUT_TAG_FZF_OPTS |
gco |
FORGIT_CHECKOUT_COMMIT_FZF_OPTS |
grc |
FORGIT_REVERT_COMMIT_FZF_OPTS |
gss |
FORGIT_STASH_FZF_OPTS |
gsp |
FORGIT_STASH_PUSH_FZF_OPTS |
gclean |
FORGIT_CLEAN_FZF_OPTS |
grb |
FORGIT_REBASE_FZF_OPTS |
gbl |
FORGIT_BLAME_FZF_OPTS |
gfu |
FORGIT_FIXUP_FZF_OPTS |
gcp |
FORGIT_CHERRY_PICK_FZF_OPTS |
Complete loading order of fzf options is:
FZF_DEFAULT_OPTS
(fzf global)FORGIT_FZF_DEFAULT_OPTS
(forgit global)FORGIT_CMD_FZF_OPTS
(command specific)Examples:
ctrl-d
to drop the selected stash but do not quit fzf (gss
specific).export FORGIT_STASH_FZF_OPTS='
--bind="ctrl-d:reload(git stash drop $(cut -d: -f1 <<<{}) 1>/dev/null && git stash list)"
'
ctrl-e
to view the logs in a vim buffer (glo
specific).export FORGIT_LOG_FZF_OPTS='
--bind="ctrl-e:execute(echo {} |grep -Eo [a-f0-9]+ |head -1 |xargs git show |vim -)"
'
Option | Description | Default |
---|---|---|
FORGIT_LOG_FORMAT |
git log format | %C(auto)%h%d %s %C(black)%C(bold)%cr%Creset |
FORGIT_PREVIEW_CONTEXT |
lines of diff context in preview mode | 3 |
FORGIT_FULLSCREEN_CONTEXT |
lines of diff context in fullscreen mode | 10 |
delta
/ diff-so-fancy
: For better human readable diffs.
bat
: Syntax highlighting for gitignore
.
emoji-cli
: Emoji support for git log
.
glo develop
, glo f738479..188a849b -- main.go
, gco master
).gd
supports specifying revision(eg, gd HEAD~
, gd v1.0 README.md
).gi
with arguments to get the wanted .gitignore
contents directly(eg, gi cmake c++
).git
, see #147 for details.completions/git-forgit.bash
in
~/.local/share/bash-completion/completions
to have bash tab completion for git forgit
and configured git aliases.completions/git-forgit.bash
explicitly to have
bash tab completion for forgit shell functions and aliases (e.g. gcb <tab>
completes branches).MIT (c) Wenxuan Zhang