如何在git中别名命令?


619

我看了一个截屏的地方,有人去了

git st
git ci

上班。当我这样做时,我遇到一个错误,问我是否还有其他意思。
作为git newb,我需要知道您需要做什么才能完成此任务?


1
您也可以在这里看到它git-scm.com/book/en/v2/Git-Basics-Git-Aliases
JayRizzo

也可以在这里查看有关git别名更高级用法的更多问题:stackoverflow.com/questions/46528736/…–
NeilG

Answers:


977

基本上你只需要添加行到 ~/.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命令甚至接受函数作为参数。看看别名


86
我强烈建议您使用git config --global别名~/.gitconfig代替.git/config当前存储库。
卡斯卡贝尔

27
我喜欢设置ststatus -s(短状态)
哈森

20
真的很棒 我一直在寻找这个。刚抬起头,如果你有空格的命令,你应该使用'git config --global alias.sr 'svn rebase'
阿米尔Raminfar

1
@HellishHeat这些别名是由git为git创建的。如果要为其他命令行系统使用别名,则必须查找如何在该系统上执行该操作。(您似乎正在使用类似Unix的系统,而我碰巧知道在Unices上创建别名非常简单。尽管语法有所不同。尝试使用Google搜索。)
Michael Dorst 2014年

17
另一个提示,如果您在Windows命令行上使用Git,则"在添加带空格的命令时将需要使用双引号而不是单引号,例如git config --global alias.ci "commit -v"
ABVincita 2015年

179

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

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

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

另外,如果您使用的是bash,我建议git-completion.bash您通过复制到主目录并从中进行采购来设置bash完成~/.bashrc。(我相信我是从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东西:blogs.oracle.com/linuxnstuff/entry/…–
Duncan Lock

10
如果您使用zsh,出色的oh-my-zsh套件将包含具有所有这些“标准” git别名的插件-github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/…–适用于bash ,请访问github.com/revans/bash-it
jobwat 2013年

菜鸟问题:“源于” ~/.bashrc文件是什么意思?
ahnbizcad

1
~/.bashrc:真正减少按键。正是在寻找什么。
parasrish

这个答案是为什么我建议在我的答案中使用.gitconfig include的完美示例!stackoverflow.com/a/59896430/117471
Bruno Bronosky

65

我认为最有用的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 2015年

3
@ahnbizcad如果您使用git config --global,则将其放置在〜/ .gitconfig中,否则将其放入当前存储库的.git / config中
shmup

19

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

git config alias.ci commit

对于全局别名:

git config --global alias.ci commit

11

这为我工作:

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。:)
罗素

4
我喜欢git cob。让我想起夏天,就像玉米棒子上的玉米一样。实际上是一个很大的词,我们不会去想足够了...芯是
МатиТернер

4
如果这是我以外的任何人第一次看到以开头的git alias命令!,请注意Since version 1.5.0, Git supports aliases executing non-git commands, by prefixing the value with "!"ref
2014年

9

这将创建一个别名ststatus

git config --add alias.st status


我需要--add并使用双引号,而不是单引号
对齐

为什么git st当您可以使用时git s,摆脱掉s:P
Abdullah

7

以下是用于节省时间的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

6

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

$ git pof

在我的终端中,将当前分支到我的原始仓库:

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

哪里

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

命令返回当前分支。

因此,这是手动输入分支名称的快捷方式:

git push origin -f <current-branch>

1
为什么不“简单地” git push -f origin HEAD将当前分支推到其远程对应分支?还有,用力推动的捷径吗?如果您必须足够频繁地推动力量以从快捷方式中受益,那么在您的设置或工作流中的其他地方难道没有什么不对吗?
RomainValeri

Bash网格化地创建了别名(用!git最后一个git命令代替),但是手动编辑配置文件就可以了。
H. de Jonge

5

您可以同时为git和non-git命令加上别名。看起来这是在1.5版中添加的。git config --helpMac上版本2.5.4 的页面中的片段显示:

如果别名扩展名带有感叹号作为前缀,它将被视为shell命令。

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

[alias]
    st = status
    hi = !echo 'hello'

然后运行它们:

$ git hi
hello
$ git st
On branch master

...

5

将以下行添加到主目录中的〜/ .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例如。别名标题下的其他命令也是如此。


4
$ git更新
git:'update'不是git命令。参见'git --help'。

你是这个意思吗
    更新参考

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

$ git更新
来自git://git.kernel.org/pub/scm/git/git
 = [最新] html-> origin / html
 = [最新] maint-> origin / maint
 = [最新]人->出身/人
 = [最新]母版->来源/母版
 = [最新]下一个->来源/下一个
 = [最新] pu-> origin / pu
 = [最新]待办事项->来源/待办事项
已经是最新的。


3

如果您使用'!',也可以链接命令。产生外壳的运算符:

aa = !git add -A && git status

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

为了方便地检查别名,请添加以下别名:

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

然后快速$ git alias为您提供您当前的别名及其作用。


3

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

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

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

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

现在,您只能使用“ conflicts”使用上述命令:

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

3

对我来说(我在终端上使用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"

2

为了使别名比其他答案中提到的标准git config更短,我创建了一个npm包mingitnpm install -g mingit),以便大多数命令将变为2个字符而不是2个单词。以下是示例:

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
感谢您创建github项目。
biniam

2

如果您想要替代 ~/.gitconfig选项方案并进一步挖掘,另一个选择是通过将它们包装在全局节点包中来编写完全自定义的git命令。

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

npm上的“ christian-git”包使用以下方法:https : //github.com/alexmacarthur/christian-git


1

在此给出的别名。即使有伟大的答案在这里,我说这是因为它在Windows和Linux不同



1

在您的文件中包含多个别名文件 .gitconfig

我建议为您的别名使用一个.gitconfig include。一旦开始创建别名,您可能会得到很多别名。他们可能是您想与他人分享的东西。将它们放在专用文件中可以轻松共享。您的团队甚至可以使用git repo来保存共享别名。当然,您也不想共享某些别名,因此请将它们保存在专用别名文件中。

[include]
    path=src/dotfiles/.gitaliases

[include]
    path=src/team-utils/gitaliases

[include]
    path=.gitaliases.private

-1

Windows的另一种可能性是在目录中填充.bat文件,并在其中添加快捷方式。文件名是要使用的快捷方式。只需将目录添加到PATH环境变量中,即可在cmd窗口中找到所有要使用的快捷方式。

例如(gc.bat):

git commit -m %1

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

gc "changed stuff"

我将其添加为答案的原因是因为使用此方法时,您不仅限于git ...命令。


1
您可以通过将shell别名添加到.profile,.bashrc或.bash_profile中来执行相同的操作,具体取决于您的系统。然后,所有别名都在一个文件中。而且,这是完成任务的标准机制。“命令别名”部分显示了一些常用的用于git命令的shell别名。关于此有更好的资源和教程,这恰好是我打开的链接。
SherylHohman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.