fzf-git.sh
bash and zsh key bindings for Git objects, powered by fzf.
Each binding will allow you to browse through Git objects of a certain type, and select the objects you want to paste to your command-line.
Installation
- Install the latest version of fzf
- (Optional) Install bat for syntax-highlighted file previews
- Source fzf-git.sh file from your .bashrc or .zshrc
Usage
- List of bindings
- CTRL-GCTRL-F for Files
- CTRL-GCTRL-B for Branches
- CTRL-GCTRL-T for Tags
- CTRL-GCTRL-R for Remotes
- CTRL-GCTRL-H for commit Hashes
- CTRL-GCTRL-S for Stashes
- CTRL-GCTRL-E for Each ref (
git for-each-ref
)
⚠️ You may have issues with these bindings in the following cases:- CTRL-GCTRL-B will not work if CTRL-B is used as the tmux prefix
- CTRL-GCTRL-S will not work if flow control is enabled,
CTRL-S will freeze the terminal instead
- (
stty -ixon
will disable it)
- (
To workaround the problems, you can use CTRL-G{key} instead of CTRL-GCTRL-{KEY}.
- Inside fzf
- TAB or SHIFT-TAB to select multiple objects
- CTRL-/ to change preview window layout
- CTRL-O to open the object in the web browser (in GitHub URL scheme)
Customization
# Redefine this function to change the options
_fzf_git_fzf() {
fzf-tmux -p80%,60% -- \
--layout=reverse --multi --height=50% --min-height=20 --border \
--border-label-pos=2 \
--color='header:italic:underline,label:blue' \
--preview-window='right,50%,border-left' \
--bind='ctrl-/:change-preview-window(down,50%,border-top|hidden|)' "$@"
}
Defining shortcut commands
Each binding is backed by _fzf_git_*
function so you can do something like
this in your shell configuration file.
gco() {
local selected=$(_fzf_git_each_ref --no-multi)
[ -n "$selected" ] && git checkout "$selected"
}