Manage branches and tags with fzf.
fzf-checkout-demo.mov
fzf, see https://github.com/junegunn/fzf/blob/master/README-VIM.md#installationgit >=2.13.7
Install using vim-plug.
Put this in your init.vim.
Plug 'stsewd/fzf-checkout.vim'- The current branch or commit will be show at the bottom
- The first item on the list will be the previous branch/tag
- Press
alt-enterto track a remote branch locally (origin/foobecomesfoo) - Press
ctrl-bto create a branch or tag with the current query as name - Press
ctrl-dto delete a branch or tag - Press
ctrl-eto merge a branch - Press
ctrl-rto rebase a branch - Ask for confirmation for irreversible actions like delete
- Asynchronously execution of commands (Neovim only)
- Define your own actions
Call :GBranches [action] [filter] or :GTags [action] to execute an action over a branch or tag.
If no action is given, you can make use of defined keymaps to execute an action.
See :h fzf-checkout for a list of all available commands and settings.
If you have fzf.vim installed,
this plugin will respect your g:fzf_command_prefix setting.
Prefix commands with Fzf, i.e, FzfGBranches and FzfGTags:
let g:fzf_command_prefix = 'Fzf'Sort branches/tags by committer date. Minus sign to show in reverse order (recent first):
let g:fzf_checkout_git_options = '--sort=-committerdate'Override the mapping to delete a branch with ctrl-r:
let g:fzf_branch_actions = {
\ 'delete': {'keymap': 'ctrl-r'},
\}Use the bang command to checkout a tag:
let g:fzf_tag_actions = {
\ 'checkout': {'execute': '!{git} -C {cwd} checkout {branch}'},
\}Define a diff action using fugitive.
You can use it with :GBranches diff or with :GBranches and pressing ctrl-f:
let g:fzf_branch_actions = {
\ 'diff': {
\ 'prompt': 'Diff> ',
\ 'execute': 'Git diff {branch}',
\ 'multiple': v:false,
\ 'keymap': 'ctrl-f',
\ 'required': ['branch'],
\ 'confirm': v:false,
\ },
\}Define checkout as the only action for branches:
let g:fzf_checkout_merge_settings = v:false
let g:fzf_branch_actions = {
\ 'checkout': {
\ 'prompt': 'Checkout> ',
\ 'execute': function('fzf_checkout#run', ['{git} -C {cwd} checkout {branch}']),
\ 'multiple': v:false,
\ 'keymap': 'enter',
\ 'required': ['branch'],
\ 'confirm': v:false,
\ },
\}List the branch/tag information in one line without preview:
let g:fzf_checkout_view_mode = 'inline'Use git diff for preview instead of git show:
let g:fzf_checkout_preview_cmd = '{git} -C {cwd} diff --color=always {1} --'Show the branch/tag name only:
let g:fzf_checkout_view_mode = 'inline'
let g:fzf_checkout_git_options = "--format='%(color:yellow)%(refname:short)'"