dotfiles/fish.configlink/functions/gittools.fish
2020-11-25 20:43:15 -05:00

81 lines
2.5 KiB
Fish

#!/usr/local/bin/fish
function gittools
function git-fuzzy-branch -a header
set -l current (git rev-parse --abbrev-ref HEAD | tr -d '\n')
set -l branch (git branch --format "%(refname:short)" | fzf --height 50% --header='On $current, $header' --preview-window right:70% --preview 'git log {} --color=always --pretty=oneline | cut -d" " -f2-')
and echo $branch
end
function git-commits
set commitline (git log --pretty=oneline | fzf --height 50% --preview 'git show --color=always (echo {} | cut -d" " -f1)')
and set commit (echo $commitline | cut -d" " -f1)
and git checkout $commit
end
function git-branch
set branch (git branch --format "%(refname:short)" | fzf --height 50% --preview 'git log {} --pretty=oneline')
set commitline (git log --pretty=oneline | fzf --height 50% --preview 'git show --color=always (echo {} | cut -d" " -f1)')
and set commit (echo $commitline | cut -d" " -f1)
and git checkout $commit
end
function git-checkout-fuzzy
set branch (git-fuzzy-branch "checkout branch...")
and git checkout $branch
end
function git-show-fuzzy
set commit (git log --pretty=oneline | fzf | cut -d' ' -f1)
and git show $commit
end
function git-merge-fuzzy
set branch (git-fuzzy-branch "merge from...")
and git merge $branch
end
function git-delete-fuzzy
set branch (git-fuzzy-branch "delete branch...")
and git branch -d $branch
end
function git-force-delete-fuzzy
set branch (git-fuzzy-branch "force delete branch...")
and git branch -D $branch
end
function git
if contains f $argv
switch $argv[1]
case "checkout"
git-checkout-fuzzy
case "show"
git-show-fuzzy
case "merge"
git-merge-fuzzy
case "branch"
if test "$argv[2]" = "-d"
git-delete-fuzzy
else if test "$argv[2]" = "-D"
git-force-delete-fuzzy
else
echo "Not a fuzzy option."
return 1
end
case "*"
echo "No fuzzy option."
return 1
end
else
if count $argv > /dev/null
command git $argv
else
command git status -sb
end
end
end
end