dotfiles/fish.configlink/functions/gittools.fish

111 lines
3.3 KiB
Fish
Raw Normal View History

2020-11-24 03:34:14 +00:00
#!/usr/local/bin/fish
function gittools
function git-fuzzy-branch -a header
set -l current (git rev-parse --abbrev-ref HEAD | tr -d '\n')
2020-11-26 01:37:14 +00:00
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="format:%C(auto)%ar %h%d %s"' \
)
2020-11-24 03:34:14 +00:00
and echo $branch
end
2020-11-26 00:27:07 +00:00
function git-commits
2020-11-26 01:37:14 +00:00
set commitline (git log \
--pretty="format:%C(auto)%ar %h%d %s" \
| fzf \
--height 50% \
--preview 'git show --color=always (echo {} | cut -d" " -f4)' \
)
2020-11-26 19:28:05 +00:00
and set commit (echo $commitline | cut -d" " -f4)
and echo $commit
2020-11-26 00:27:07 +00:00
end
2020-11-24 03:34:14 +00:00
function git-checkout-fuzzy
set branch (git-fuzzy-branch "checkout branch...")
and git checkout $branch
end
2020-11-25 22:56:17 +00:00
function git-show-fuzzy
set commit (git log --pretty=oneline | fzf | cut -d' ' -f1)
and git show $commit
end
2020-11-26 04:03:52 +00:00
function git-add-fuzzy
set gitfile (git status -s \
| fzf \
--height 50% \
-m \
--preview-window right:70% \
2020-11-28 21:10:50 +00:00
--preview 'set -l IFS; set gd (git diff --color=always (echo {} | awk \'{$1=$1};1\' | cut -d" " -f2)); if test "$gd"; echo "$gd"; else; bat --color=always (echo {} | awk \'{$1=$1};1\' | cut -d" " -f2); end')
2020-11-26 04:03:52 +00:00
and for gf in $gitfile
set gf (echo $gf \
| awk '{$1=$1};1' \
| cut -d' ' -f2 \
)
and git add $gf
end
end
2020-11-24 03:34:14 +00:00
function git-merge-fuzzy
set branch (git-fuzzy-branch "merge from...")
and git merge $branch
2020-11-24 03:34:14 +00:00
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
2020-11-26 04:03:52 +00:00
case "add"
git-add-fuzzy
2020-11-25 22:56:17 +00:00
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
2020-11-26 19:28:05 +00:00
case "reset"
set commit (git-commits)
and if test "$argv[2]" = "--hard"
git reset --hard $commit
else
git reset $commit
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
2020-11-24 03:34:14 +00:00
end
end