像 Mercurial 一样自动完成 Git 命令

Autocomplete Git commands like Mercurial does

不完全确定如何表达这个问题,但 Mercurial 有一个我非常喜欢的功能,当您指定命令的一部分时,它足够聪明地识别您指的是哪个命令。因此,例如:hg sta 将扩展为 hg status

有什么方法可以在 Git 中获得等效的行为,以便(例如)git sta 自动扩展为 git status

编辑:澄清一下:我知道您可以使用 Git 进行制表符补全。我也知道您可以创建别名来缩短命令。我想要的就像 Mercurial,如果你不使用 Tab 键完成它会在可能的情况下推断出命令。例如:

git stas

后面回车执行为git stash.

只需将 this 脚本放到 ~/.git-completion.bash

并将此行添加到 ~/.bashrc

#added by KES
export LESS="-RFXS -x4"
export TZ='Europe/Zaporozhye'


#Turn off wired ~
printf "\e[?2004l"

if [ -z "$SSH_CLIENT" ]; then
    export EDITOR="subl"
else
    export EDITOR="rsub --port 52697"
    export RMATE_PORT="52697"
fi

alias gn="git-number"
alias ge="gn -c $EDITOR"
alias ga="gn add"
alias gap="EDITOR='$EDITOR -w' gn add -p"
alias gd="gn -c git diff -b -w --ignore-blank-lines"
alias gds="gd --staged"
alias gc="gn -c git checkout"
alias gcf="git flow feature checkout"
alias gl="gn -c git log -w -b -p --ignore-blank-lines"
alias gls="git log --stat"
alias cm="EDITOR='$EDITOR -w' git commit"

gcd() {
    test -n "" && cd $(dirname $(git list ))
}

source ~/.git-completion.bash
__git_complete gn  _git
__git_complete ga  _git_add
__git_complete gap _git_add
__git_complete gd  _git_diff
__git_complete gds _git_diff
__git_complete gc  _git_checkout
__git_complete gcf _git_checkout
__git_complete gl  _git_log
__git_complete gls _git_log
__git_complete cm  _git_commit
#added by KES

你只需要 source ~/.git-completion.bash 但为了方便我使用了更多

注意:git sta 的一个选项卡不起作用,因为有更多的完成:

$ git sta
stage    stash    status

尝试按 TAB 两次,或 git stat + TAB

Mercurial 的这个功能确实非常方便,因为它准确地知道什么时候字母数不够,什么时候命令不明确。它还为您提供了可能性列表。

这就是说,这个特性在git中是不存在的,似乎采取的方式是提供shell依赖的补全,如上所述。如果您想与 git 开发人员讨论此问题,您仍然可以在 http://www.mail-archive.com/git@vger.kernel.org/ 邮件列表中提出增强请求(或者查看之前是否已被询问过)。