如何在Git中为命令设置别名?

795

我看过一个视频,在那里有人已经得到了

git st
git ci

如何使用Git?我尝试着去做,但是却遇到了一个错误提示,问我是否指的是别的什么东西。
作为一个Git新手,我需要知道完成这个任务需要做些什么?


3
您可以在此处查看 https://git-scm.com/book/zh/v2/Git-基础-Git-别名 - JayRizzo
还可以在这里查看更高级的git别名使用方面的更多问题:https://stackoverflow.com/questions/46528736/git-alias-returns-an-error-when-using-pipe-command/ - NeilG
26个回答

1247

基本上,您只需要向~/.gitconfig添加行即可。

[alias]
    st = status
    ci = commit -v

或者您可以使用git config alias命令:

$ git config --global alias.st status 

在Unix上,如果别名中有空格,请使用单引号:

$ git config --global alias.ci 'commit -v'

如果别名中含有空格或命令行参数,则在Windows中请使用双引号:

c:\dev> git config --global alias.ci "commit -v"

alias命令甚至可以接受函数作为参数。请查看别名


103
我强烈建议您使用git config --global将别名放置在~/.gitconfig中,而不是.git/config(当前存储库的配置文件)。 - Cascabel
31
我更喜欢使用 st 命令来查看状态,而不是使用 status -s(简短状态)命令。 - hasen
22
太棒了,我一直在寻找这个。提醒一下,如果你的命令中有空格,应该使用 ' ,像这样:git config --global alias.sr 'svn rebase' - Amir Raminfar
1
@HellishHeat 这些别名是由git为git创建的。如果您想要其他命令行系统的别名,您需要查找如何在该系统上执行此操作。(您似乎正在使用类Unix系统,我碰巧知道在Unix上创建别名非常简单。但语法不同。尝试进行谷歌搜索。) - Michael Dorst
18
再次提醒一下,如果您在Windows命令行中使用Git,则在添加带有空格的命令时需要使用双引号"而不是单引号,例如:git config --global alias.ci "commit -v" - ABVincita
显示剩余7条评论

220

正如其他人所说,添加git别名的适当方法是在全局的.gitconfig文件中进行,可以通过编辑~/.gitconfig文件或使用git config --global alias.<alias> <git命令>命令来实现。

以下是我~/.gitconfig文件中别名部分的副本:

[alias]
    st = status
    ci = commit
    co = checkout
    br = branch
    unstage = reset HEAD --
    last = log -1 HEAD

另外,如果你使用的是bash,我建议将git-completion.bash复制到你的主目录中,并在~/.bashrc中引用它,以设置bash自动补全功能。(我相信我是从Pro Git在线书籍中学到这个方法的。)在Mac OS X上,我通过以下命令完成了这个操作:
# Copy git-completion.bash to home directory
cp usr/local/git/contrib/completion/git-completion.bash ~/

# Add the following lines to ~/.bashrc
if [ -x /usr/local/git/bin/git ]; then
    source ~/.git-completion.bash
fi

注意: Bash补全不仅适用于标准git命令,也适用于您的git别名。

最后,为了减少按键次数,我在~/.bash_aliases文件中添加了以下内容,该文件从~/.bashrc中获取源代码:

alias gst='git status'
alias gl='git pull'
alias gp='git push'
alias gd='git diff | mate'
alias gau='git add --update'
alias gc='git commit -v'
alias gca='git commit -v -a'
alias gb='git branch'
alias gba='git branch -a'
alias gco='git checkout'
alias gcob='git checkout -b'
alias gcot='git checkout -t'
alias gcotb='git checkout --track -b'
alias glog='git log'
alias glogp='git log --pretty=format:"%h %s" --graph'

2
对于Linux系统,我使用以下方法获取git-completion.bash文件:https://blogs.oracle.com/linuxnstuff/entry/recommended_git-completionbash - Duncan Lock
14
如果你使用 zsh,优秀的 oh-my-zsh 套件包含一个插件,其中包含所有这些“标准”的 git 别名 - https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh -- 对于 bash 用户,请查看 https://github.com/revans/bash-it。 - jobwat
新手问题:什么是“从”~/.bashrc文件“获取”的意思? - ahnbizcad
1
~/.bashrc:真正减少按键次数的好方法。正是我一直在寻找的。 - parasrish
在Mac上,如果您找不到/.bashrc文件,则可以找到/.bash_profile文件。然后,在.bash_profile文件中执行所描述的操作。 - htlbydgod
显示剩余2条评论

80

我认为最有用的gitconfig像这样,我们经常使用git中的20%功能,你可以尝试"g ll",它很棒,详情如下:

[user]
    name = my name
    email = me@example.com
[core]  
    editor = vi 
[alias]
    aa = add --all
    bv = branch -vv
    ba = branch -ra
    bd = branch -d
    ca = commit --amend
    cb = checkout -b
    cm = commit -a --amend -C HEAD
    ci = commit -a -v
    co = checkout
    di = diff
    ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
    ld = log --pretty=format:"%C(yellow)%h\\ %C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short --graph
    ls = log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative
    mm = merge --no-ff
    st = status --short --branch
    tg = tag -a 
    pu = push --tags
    un = reset --hard HEAD  
    uh = reset --hard HEAD^
   [color]  
    diff = auto  
    status = auto  
    branch = auto 
   [branch]  
    autosetuprebase = always

你如何设置这个?你需要在哪里放置什么来实现这个? - ahnbizcad
3
如果你使用了 git config --global 命令,则将此设置放置在 ~/.gitconfig 文件中,否则请将其放置在当前仓库的 .git/config 文件中。 - shmup
如果有帮助的话,可以使用完整的 .gitconfig 和 **参考教程**! - Niket Pathak

22

你需要使用git config alias命令。在Git仓库中执行以下命令:

git config alias.ci commit

对于全局别名:

git config --global alias.ci commit

17

如果您使用'!'运算符生成一个shell,您也可以链接多个命令:

aa = !git add -A && git status

这将同时添加所有文件并通过$ git aa提供状态报告。

为了方便地检查您的别名,请添加此别名:

alias = config --get-regexp ^alias\\.

然后,快速运行$ git alias可以获取当前的别名及其作用。


13

这对我有效:

bco = "!f(){ git branch ${1} && git checkout ${1}; };f"

在:

$ git --version

git version 1.7.7.5 (Apple Git-26)

1
你也可以这样做:git config --global alias.bco 'checkout -b'。然后你就可以这样做:git bco new-branch。 :) - Russell
4
我喜欢用“git cob”。它让我想起夏天,就像玉米棒一样。实际上,这是一个很不错的词,我们没有多想过…… 就是指“玉米棒”那个意思。 - Matthew Turner
5
如果这是除了我以外的任何人第一次看到以开头的Git别名命令,请注意:“自Git 1.5.0版本起,Git支持通过在值前加上“!”来执行非Git命令的别名。”(参考文献:https://git.wiki.kernel.org/index.php/Aliases#Advanced) - Sam

13

我为展示日志图表创建了别名dog

git config --global alias.dog "log --all --decorate --oneline --graph"

使用方式如下:

git dog

10

以下是4个Git快捷方式或别名,可帮助您节省时间。

打开命令行并输入以下4个命令,然后使用快捷方式即可。

git config --global alias.co checkout  
git config --global alias.ci commit    
git config --global alias.st status    
git config --global alias.br branch  

现在测试它们!

$ git co              # use git co instead of git checkout
$ git ci              # use git ci instead of git commit
$ git st              # use git st instead of git status
$ git br              # use git br instead of git branch

谢谢你!我一直在寻找一种能够通过一次复制粘贴操作完成的方法。 - Vasilii Suricov

10

对于我来说(我使用带终端的Mac),只有在添加到.bash_profile并打开另一个选项卡来加载更改时才有效:

alias gst="git status"
alias gd="git diff"
alias gl="git log"
alias gco="git commit"
alias gck="git checkout"
alias gl="git pull"
alias gpom="git pull origin master"
alias gp="git push"
alias gb="git branch"

我喜欢你的风格。 - JakeWilson801

9
请在您的主目录下的~/.gitconfig文件中添加以下行:
[alias]
# one-line log
l = log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short
ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
ld = log --pretty=format:"%C(yellow)%h\\ %C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short --graph
ls = log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative

a = add
ap = add -p
c = commit --verbose
ca = commit -a --verbose
cm = commit -m
cam = commit -a -m
m = commit --amend --verbose

d = diff
ds = diff --stat
dc = diff --cached

s = status -s
co = checkout
cob = checkout -b
# list branches sorted by last modified
b = "!git for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's-refs/heads/--'"

# list aliases
la = "!git config -l | grep alias | cut -c 7-"

完成这一步之后,你可以使用git a代替git add。同样的方法也适用于其他在别名标题下的命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接