# ref: # https://qiita.com/sfus/items/063797a1dd8fdc7d032f # https://github.com/jonas/tig/wiki/Bindings #==================== # geineric #==================== # vim-like g binding, 'gp' for git grep bind generic g none bind generic gp view-grep bind generic gg move-first-line bind generic G move-last-line # scroll right easily bind generic scroll-left bind generic scroll-right # redraw, refresh, source tigrc bind generic refresh bind generic l screen-redraw bind generic R :source ~/.tigrc # clipboard bind generic xx +sh -c "echo -n %(commit) | head -c7 | xclip -sel c && echo Commit Clipped!" bind generic xc +sh -c "echo -n %(commit) | xclip -sel c && echo Full Commit Clipped!" bind generic xt +sh -c "echo -n %(text) | xclip -sel c && echo Text Clipped!" bind generic xrb +sh -c "echo -n %(branch) | xclip -sel c && echo Branch Clipped!" bind generic xrB +sh -c "echo -n %(remote):%(branch) | xclip -sel c && echo Remote Branch Clipped!" bind generic xrt +sh -c "echo -n %(tag) | xclip -sel c && echo tag Clipped" bind generic xf +sh -c "echo -n %(file) | xclip -sel c && echo File Clipped" bind generic xb +sh -c "echo -n %(blob) | head -c7 | xclip -sel c && echo Blob Clipped" bind generic xB +sh -c "echo -n %(blob) | xclip -sel c && echo Full Blob Clipped" # toggle case sensitive for search bind generic w :toggle ignore-case # see reflog, reset refernece bind generic 8 >sh -c "git reflog --pretty=raw | tig --pretty=raw" bind generic gl ?git checkout HEAD@{"%(prompt Enter HEAD@{} number: )"} bind generic gL ?git reset --hard HEAD@{"%(prompt Enter HEAD@{} number: )"} # highlight diff without +/- set diff-show-signs = false set diff_column_highlight = ALL # misc settings set ignore-case = true set line-graphics = utf-8 set refresh-mode = auto #==================== # main view #==================== set main-view = \ date:relative \ author:abbreviated \ id \ commit-title:graph=v2,refs=true # override graph toggling bind main G none bind main G move-last-line bind main ` :toggle commit-title-graph bind main F none bind main :toggle commit-title-refs # edit tigrc bind main e >sh -c "vim ~/git/settings/tigrc" # move bind main :move-next-merge bind main :move-prev-merge bind main gh :goto HEAD bind main ; :goto %(commit)^2 # go to second parent # branch bind main b none bind main bn @git branch "%(prompt Enter branch name: )" %(commit) bind main bN @git branch %(branch) --track %(remote)/%(branch) bind main bu @git branch --set-upstream-to="%(prompt Set remote/branch: )" bind main bc @git checkout -b "%(prompt Checkout at new branch: )" %(commit) bind main bd @git branch -d "%(prompt Delete branch: )" bind main bbd @git branch -d %(branch) bind main bD ?>git branch -D "%(prompt Delete branch anyway: )" bind main bbD ?>git branch -D %(branch) bind main brd ?git branch -rd %(remote)/%(branch) bind main bv +sh -c "git branch -vv | grep %(branch)" bind main bm @git branch -m %(branch) "%(prompt New branch name: )" bind main bM @git branch -f "%(prompt Move which branch to here? )" %(commit) bind main c @sh -c "git branch --points-at=%(commit) | \ sed -n '/^*/ {n;p}' | \ (cat -; echo %(commit)) | \ head -1 | \ xargs git checkout" bind main bo >tig %(branch) bind main bO >tig "%(prompt Enter branch: )" bind main ba >tig --all # commit bind main a !>git commit --amend bind main 3 >git commit --allow-empty -m "%(prompt Empty commit, enter message: )" # merge bind main m ?@git merge %(commit) bind main M ?@git merge %(branch) --no-ff bind main gm ?@git merge %(remote)/%(branch) # merge with current remote bind main gM ?@git merge %(remote)/%(branch) --no-ff # merge-no-ff with current remote # push bind main p none # override default pager binding bind main pp ?git push bind main pP ?git push -u %(remote) %(branch):%(branch) bind main pr ?git push -u '%(prompt Which remote? )' %(branch):%(branch) bind main pF ?git push -f bind main pd ?git push %(remote) :%(branch) bind main pD ?git push '%(prompt Which remote? )' :'%(prompt Which branch? )' # fetch bind main F ?git fetch %(remote) %(branch) # Go to Fetch bind main ?git fetch %(remote) bind main gf ?git fetch '%(prompt Which remote? )' # Go to Fetch a specific remote bind main pu ?git pull bind main pU ?git pull --rebase # reset/rebase/revert bind main uu ?git reset %(commit) bind main us ?sh -c "git reset %(commit) && git stash push -m 'deprecated from reset'" # reset and stash the changes bind main uh ?git reset %(commit) --hard bind main B !?git rebase -i %(commit) bind main gb !?git rebase --onto '%(prompt Rebase onto which branch? )' %(commit) %(repo:head) bind main ! ?git revert %(commit) # tag bind main Tn @git tag "%(prompt Enter tag name: )" %(commit) bind main TN !git tag "%(prompt Enter tag name: )" %(commit) -a bind main Tm @sh -c 'git tag -d %(tag) && git tag "%(prompt Enter tag name: )" %(commit)' bind main TM @sh -c 'git cat-file -p %(tag) | sed -n \'6,$p\' | git tag -a -F - "%(prompt Enter tag name: )" && git tag -d %(tag)' bind main Ts >tig show %(tag) bind main Td @git tag -d "%(prompt Delete tag: )" bind main Tp ?git push --tags bind main pt ?git push %(remote) %(tag) bind main TTd @git tag -d %(tag) # search in history bind main S >sh -c 'git log -S "%(prompt Search: )" --pretty=raw | tig --pretty=raw' # submodule bind main Zu ?>git submodule update bind main Zi ?>git submodule init # show diff based on revision bind main . >sh -c "git diff %(commit) | tig" bind main > >sh -c "git diff %(commit) --no-prefix -U1000 | tig" # make patches bind main PP ?>git format-patch %(commit) bind main P1 ?>git format-patch -1 %(commit) # Hub bind main i @hub browse -- commit/%(commit) bind main I >sh -c "hub issue | tig" # Misc ## Statistics bind main gc !sh -c 'cloc --git %(commit) | tig' ## Misc-android bind main !sh scripts/bump_version.sh ## Remote bind main gr +sh -c "git remote -v | grep %(remote)" # note #bind generic gnn !git notes edit %(commit) #bind generic gnr !git notes remove %(commit) #==================== # blame view #==================== bind blame m >tig -- %(file) bind blame . >sh -c "git diff %(ref) -- %(file) | tig" bind blame > >sh -c "git diff %(ref) --no-prefix -U1000i -- %(file) | tig" set blame-view = author:abbreviated date:relative id:yes,color line-number:yes text #==================== # blob view #==================== bind blob m >tig -- %(file) #==================== # status view #==================== bind status j :/^[MADRU?] bind status k :?^[MADRU?] # stash bind status s ?>git stash bind status S @git stash push -m "%(prompt Enter stash name: )" bind status gs !git stashstaged # quick commit bind status c @git commit -m "%(prompt Enter commit message: )" bind status a !>git commit --amend bind status p ?>sh -c "git commit -m 'update' && git push" # quick push bind status d ?>rm %(file) # solve conflict bind status U ?>git reset --hard bind status gc @git clean -f bind status Ba @git rebase --abort bind status Bc @git rebase --continue bind status !sh -c "git difftool -y \"$(git rev-parse --show-toplevel)/%(file)\"" bind status gu @git update-index --assume-unchanged %(file) # apply patch file bind status ?git am %(file) #==================== # stash view #==================== bind stash a ?git stash apply %(stash) bind stash d ?>git stash drop %(stash) bind stash p ?>git stash pop %(stash) # rename a stash bind stash n @sh -c "git stash drop %(stash) | \ awk '{print $3}' | \ tr -d '()' | \ xargs git stash store -m '%(prompt Enter stash name: )'" #==================== # stage view #==================== bind stage :/^@@ bind stage :?^@@ bind stage j :/^diff --(git|cc) bind stage k :?^diff --(git|cc) #==================== # tree view #==================== set tree-view = author:abbreviated date:relative mode file-size:units id:no file-name bind tree l enter bind tree t +git cat-file -p %(commit) bind tree d ?rm %(file) bind tree m >tig -- %(file) bind tree xt +sh -c "git rev-parse %(commit)^{tree} | xclip -sel c -o | awk '{print \"Tree Clipped\", $1}'" bind tree . >sh -c "git diff %(ref) -- %(file) | tig" #==================== # refs view #==================== bind refs C none bind refs c @git checkout %(branch) bind refs b none bind refs bd @git branch -d %(branch) bind refs bD ?git branch -D %(branch) bind refs pd ?git push %(remote) :%(branch) bind refs r none bind refs brd ?git branch -rd %(remote)/%(branch) bind refs U ?git fetch --all bind refs ?git fetch %(remote) bind refs F ?git fetch %(remote) %(branch) bind refs . >sh -c "git diff %(branch) | tig" bind refs > >sh -c "git diff %(branch) --prefix -U1000 | tig" #==================== # log view #==================== bind log :/^commit bind log :?^commit #==================== # diff view #==================== bind diff :/^@@ bind diff :?^@@ bind diff j :/^diff --(git|cc) bind diff k :?^diff --(git|cc) bind diff u @git checkout %(commit)^ -- %(file) #==================== # help view #==================== # edit tigrc bind help e >sh -c "vim ~/.tigrc" #==================== # color #==================== color diff-chunk white magenta