我如何在git中使用别名命令?


How do I alias commands in git?

我看到一个电影放映,有人在那里

1
2
git st
git ci

去工作。当我这样做的时候,我会有一个错误,问我是否还有别的意思。作为一个Git新手,我需要知道你要做什么才能做到这一点?


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

1
2
3
[alias]
    st = status
    ci = commit -v

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

1
$ git config --global alias.st status

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

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

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

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

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


正如其他人所说,添加Git别名的适当方法是在全局.gitconfig文件中,通过编辑~/.gitconfig或使用git config --global alias. 命令

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

1
2
3
4
5
6
7
[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上,我通过以下命令完成了这一点:

1
2
3
4
5
6
7
# 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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'


我觉得最有用的Gitconfig是这样的,我们总是在Git中使用20%的函数,你可以试试"g ll",这很神奇,细节如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[user]
    name = my name
    email = [email protected]
[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


你需要git config alias命令。在Git存储库中执行以下操作:

1
git config alias.ci commit

对于全局别名:

1
git config --global alias.ci commit


这对我很有用:

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

关于:

1
2
3
$ git --version

git version 1.7.7.5 (Apple Git-26)


这将为status创建一个别名st

埃多克斯1〔3〕


您可以同时使用git和非git命令的别名。看起来这是在1.5版中添加的。我的Mac 2.5.4版上的git config --help页面的一段代码显示:

If the alias expansion is prefixed with an exclamation point, it will be treated as a shell command.

例如,在全局.gitconfig文件中,您可以拥有:

1
2
3
[alias]
    st = status
    hi = !echo 'hello'

然后运行它们:

1
2
3
4
5
6
$ git hi
hello
$ git st
On branch master

...


下面是您用来节省时间的4个Git快捷键或别名。

打开命令行,在下面的4个命令中键入这些命令,然后使用快捷方式。

1
2
3
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

现在测试一下!

1
2
3
4
$ 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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ git update
git: 'update' is not a git command. See 'git --help'.

Did you mean this?
    update-ref

$ git config --global alias.update 'pull -v'

$ git update
From git://git.kernel.org/pub/scm/git/git
 = [up to date]      html       -> origin/html
 = [up to date]      maint      -> origin/maint
 = [up to date]      man        -> origin/man
 = [up to date]      master     -> origin/master
 = [up to date]      next       -> origin/next
 = [up to date]      pu         -> origin/pu
 = [up to date]      todo       -> origin/todo
Already up-to-date.


对于那些希望在git别名中执行shell命令的用户,例如:

1
$ git pof

在我的终端中,将强制当前分支到我的原始报告:

1
2
[alias]
    pof = !git push origin -f $(git branch | grep \\* | cut -d ' ' -f2)

在哪里

1
$(git branch | grep \\* | cut -d ' ' -f2)

命令返回当前分支。

这是手动键入分支名称的快捷方式:

1
git push origin -f <current-branch>


在主目录的~/.gitconfig中添加以下行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[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。这同样适用于别名标题下的其他命令。


您可以使用git的配置设置自定义git别名。语法如下:

1
git config --global alias."<git command>"

例如,如果需要别名来显示具有合并冲突的文件列表,请运行:

1
git config --global alias.conflicts"diff --name-only --diff-filter=U"

现在,您只能使用"冲突"来使用上述命令:

1
2
git conflicts
# same as running: git diff --name-only --diff-filter=U

为了使别名比其他答案中提到的标准git配置方法更短,我创建了一个NPM包mingit(npm install -g mingit),这样大多数命令将变成2个字符而不是2个字。示例如下:

1
2
3
4
5
6
7
8
9
10
11
g a .                   // git add .
g b other-branch        // git branch other-branch
g c"made some changes" // git commit -m"made some changes"
g co master             // git checkout master
g d                     // git diff
g f                     // git fetch
g i                     // git init
g m hotfix              // git merge hotfix
g pll                   // git pull
g psh                   // git push
g s                     // git status

其他命令也同样简短。这也保持了bash完成。这个包为您的点文件添加了一个bash函数,在OSX、Linux和Windows上工作。此外,与其他别名不同,它的别名为git->g,以及第二个参数。


如果使用"!",也可以链接命令。要生成外壳的运算符:

1
aa = !git add -A && git status

这将添加所有文件,并向您提供带有$ git aa的状态报告。

要方便地检查别名,请添加此别名:

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

然后一个快速的$ git alias会给你当前的别名以及它们的作用。


这里有别名。即使这里有很好的答案,我添加这个是因为它在Windows和Linux中有所不同


对于我(我使用的是带有终端的Mac),只有当我添加了.bash_配置文件并打开另一个选项卡来加载更改时才有效:

1
2
3
4
5
6
7
8
9
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"


Windows的另一种可能是在目录中填入.bat文件,这些文件中有您的快捷方式。文件名是要使用的快捷方式。只需将目录添加到PATH环境变量中,就可以在命令窗口中使用所有的快捷方式进行处理。

例如(gc.bat):

1
git commit -m %1

然后可以在控制台中执行以下命令:

1
gc"changed stuff"

我之所以添加这个作为答案,是因为使用这个命令时,您不仅限于git ...命令。


如果您想选择~/.gitconfig选项,并愿意多挖掘一些内容,另一个选择是通过将自定义git命令包装在全局节点包中来编写它们。

在package.json中,您将定义根命令(例如:gt),然后过滤特定命令以执行正确的git命令。例如,git checkout my-branch可以是gt co mybranch

NPM上的"Christian Git"包使用以下方法:https://github.com/alexmarthur/Christian-Git


.gitconfig文件的pfa屏幕截图

具有以下别名

1
2
3
[alias]
    cb = checkout branch
    pullb = pull main branch