fzf-git.sh
==========
bash and zsh key bindings for Git objects, powered by [fzf][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.
[fzf]: https://github.com/junegunn/fzf
Installation
------------
1. Install the latest version of [fzf][fzf]
* (Optional) Install [bat](https://github.com/sharkdp/bat) for
syntax-highlighted file previews
1. Source [fzf-git.sh](https://raw.githubusercontent.com/junegunn/fzf-git.sh/main/fzf-git.sh) file from your .bashrc or .zshrc
Usage
-----
* List of bindings
* CTRL-GCTRL-F for **F**iles
* CTRL-GCTRL-B for **B**ranches
* CTRL-GCTRL-T for **T**ags
* CTRL-GCTRL-R for **R**emotes
* CTRL-GCTRL-H for commit **H**ashes
* CTRL-GCTRL-S for **S**tashes
* CTRL-GCTRL-E for **E**ach ref (`git for-each-ref`)
> :warning: 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 -ixoff -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
-------------
```sh
# Redefine this function to change the options
_fzf_git_fzf() {
fzf-tmux -p80%,60% -- \
--layout=reverse --multi --height=50% --min-height=20 --border \
--color='header:italic:underline' \
--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.
```sh
gco() {
local selected=$(_fzf_git_each_ref --no-multi)
[ -n "$selected" ] && git checkout "$selected"
}
```