列出Git别名


443

如何打印我的git别名的列表,即类似于bash alias命令的内容?



7
@MattDiPasquale-我认为以下最佳答案有效,也许您应该接受?
domoarigato 2014年

@domoarigato谢谢。很抱歉不接受答案。我就是这样
ma11hew28

它可能是有用问题的候选者,最长的问题没有一个公认的答案就没来了:):P
domoarigato

@domoarigato哈。好,谢谢。:-)
ma11hew28

Answers:


124

这个答案建立在答案约翰尼。如果您不使用git-aliasfrom ,则适用git-extras

在Linux上,运行一次:

git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"

这将创建一个名为的永久git别名alias,该别名将存储在~/.gitconfig文件中。使用它会以与~/.gitconfig文件中几乎相同的格式列出所有git别名。要使用它,请键入:

$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /

适用以下注意事项:

  • 为防止别名alias如上所述列出,请| grep -v ^'alias '在结束双引号之前附加。我不建议您这样做,以便用户不要忘记该命令alias只是一个别名,而不是git的功能。

  • 要对列出的别名进行排序,请| sort在右双引号之前添加。或者,您可以使别名保持~/.gitconfig排序。

  • 要将别名添加为系统范围的别名,请将--global(对于当前用户)替换为--system(对于所有用户)。这通常在/etc/gitconfig文件中。


3
我喜欢这一行,因为它消除alias.了每一行的开头
Brian J

3
不知道为什么,但是这个答案对我不起作用。我不断fatal: bad config。不过,Git-extra的解决方案确实对我有用
Ashitaka 2015年

1
@Ashitaka,请尝试使用受限版本,例如git config --global alias.alias "! git config --get-regexp ^alias\."。另外,请确保git version您具有最新版本的git。
Acumenus

这确实是很棒的工作,并且以一种非常有用的方式将它们放在一起!
UpAndAdam

我相信您可以摆脱“!git”部分,该部分基本上可以相互抵消。请参阅Git Aliases
Daniel Stevens,

488
$ git config --get-regexp别名

39
要上学,应该是'^alias\.'
Josh Lee

27
或者只是git config -e然后用眼睛找到该[alias]部分。但是git粉丝似乎总是抛出一些bash脚本或正则表达式匹配来解决他们的问题,即使在没有必要的时候也是如此:)
MatrixFrog 2011年

39
git config -e.git/config仅编辑文件。但是我的大多数别名都是在global中定义的~/.gitconfig
2012年

21
切实可行,应该git config --global alias.aliases config --get-regexp '^alias\.'"...然后git aliases
德里克·格里尔

6
@DerekGreer您错过了"某个地方
Jake Berger

147

alias为此,我创建了一个git别名(足够奇怪)...如果您使用足够的别名,会时不时地方便使用...

$ git config --global alias.alias "config --get-regexp ^alias\."

注意,正则表达式确保行以开头alias.


我添加了一个答案,该答案略有不同。
Acumenus 2014年

1
我建议--system不要--global在系统级别而不是用户级别使用类似的方法。
ADTC 2014年

1
喜欢这个。尤达(You da You da best)
Charles Watson

2
而且,如果您要将其直接添加到gitconfig中,它必须如下所示:alias = config --get-regexp ^alias\\.
marczych

怎么样git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
基思·罗伯逊

84

另一种选择(我确实很容易记住一些东西):

git config --list | grep alias


8
说到容易记住,您最好一次创建一个alias别名,然后忘记创建它。
Acumenus 2014年

3
您可以将它-l用作方便的快捷方式,--list但是我喜欢创建别名以列出别名的想法。
ADTC 2014年

1
好的解决方案,但最好在带有正则表达式的情况下使用grep生成以别名开头的行,以防某些配置包含关键字别名:git config --list | grep -E '^alias'
MasterMind

28

以下在Linux,MacOSX和Windows(带有msysgit)下可以工作。

使用git la在.gitconfig中显示别名

我听到过“ bash脚本”吗?;)

关于上面注释中的“不需要”部分,我基本上为别名创建了一个手册页,如概述。为什么大惊小怪?那不是完全的矫kill过正吗?

继续阅读...

我已经在我的.gitconfig中设置了这样的命令,像这样分隔TAB=TAB

[alias]
        alias1            =            foo -x -y --z-option
        alias2            =            bar -y --z-option --set-something

并且只需定义另一个别名即可grep TAB=定义的别名的一部分。(所有其他选项在其定义中的“ =”前后都没有制表符,只有空格。)

未附加到别名的注释也被TAB=====附加,因此在grepping后显示。

为了更好地查看,我将grep输出减少了,例如:

基本版本:(黑/白)

  #.gitconfig
  [alias]
        # use 'git h <command>' for help, use 'git la' to list aliases  =====
        h     =     help #... <git-command-in-question>
        la    =     "!grep '\t=' ~/.gitconfig | less" 

\t=”部分匹配TAB=

为了更好地了解我所拥有的别名,并且由于我使用了bash控制台,因此我用终端颜色为输出着色:

  • 所有'='都以红色打印
  • 所有“#”均以绿色打印

高级版本:(彩色)

       la      =       "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"

基本上与上述相同,只是添加了sed用法,以便将颜色代码输入输出。

-R较少,需要在更短的得到所显示的颜色。

(我最近发现,在窗口下方带有滚动条的长命令在移动设备上无法正确显示:它们的文本被切断,滚动条只是丢失了。在这里的最后一个代码段可能就是这种情况,请保留在随时随地查看代码段时要注意)。


为什么要发挥这种魔力?

我有大约半英里的别名,可以根据自己的需要量身定制。
它们中的一些也会随着时间变化,因此,掌握最新列表的最佳方法毕竟是解析.gitconfig。

我的.gitconfig别名的简短摘要:

    #  choose       =====
    a       =       add #...
    aa      =       add .
    ai      =       add -i
    #  unchoose     =====
    rm      =       rm -r #... unversion and delete
    rmc     =       rm -r --cached #... unversion, but leave in working copy
    #  do   =====
    c       =       commit -m #...
    fc      =       commit -am "fastcommit"
    ca      =       commit -am #...
    mc      =       commit # think 'message-commit'
    mca     =       commit -a
    cam     =       commit --amend -C HEAD # update last commit
    #  undo =====
    r       =       reset --hard HEAD
    rv      =       revert HEAD

在我的Linux或Mac工作站中,.bashrc文件中还存在其他别名,例如:

#.bashrc
alias g="git"
alias gh="git h"
alias gla="git la"
function gc { git c "$*" } # this is handy, just type 'gc this is my commitmessage' at prompt

这样一来,无需键入git help submodule,无需进行操作git h submodule,仅需gh submodule获得帮助即可。它只是一些字符,但是您多久键入一次呢?

我会使用以下所有内容,当然只使用快捷方式...

  • 承诺
  • 提交-修改
  • 重置--hard HEAD
  • 重新设定
  • 查看
  • 显示分支(有很多变体)
  • 简短日志
  • 刷新日志
  • 差异(变化形式)
  • 日志(有很多变化)
  • 状态
  • 显示
  • 笔记
  • ...

这只是从我的头上。

我经常不得不在没有gui的情况下使用git,因为许多git命令在任何图形前端中均未正确实现。但是,每当我使用它们时,大多数情况下都是相同的。

在上一段提到的“未实现”部分:
我还没有找到可以与GUI进行比较的东西:
sba = show-branch --color=always -a --more=10 --no-name-显示所有本地和远程分支以及它们在其中的提交
ccm = "!git reset --soft HEAD~ && git commit"-更改最后的提交消息

从一个角度来看是更简单:
你多久键入git add .git commit -am "..."?不计算即使休息...
把事情像工作git aagit ca "..."在Windows中,
或使用bash别名gaa/ g aagca "..."/ g ca "..."Linux和Mac上的...

对于我的需求,定制这样的git命令似乎是一件明智的事情...
……为了更容易使用,我只是帮助自己使用了较少使用的命令,因此我不必每次都查阅手册页。命令是预定义的,查找起来尽可能容易。

我的意思是,我们毕竟是程序员?使事情像我们需要的那样工作是我们的工作。

这是一个附加的屏幕截图,在Windows中可以使用:

使用cmd.exe的脚本

奖励:如果您使用的是Linux或Mac,彩色手册页可以为您提供很多帮助:

彩色手册页


1
我无法在Windows下使用它。输出为空白,例如la = "!grep '\t=' ~/.gitconfig | less"
chwi 2012年

1
@Wilhelmsen:您是否可以复制并粘贴上面列出的内容?你真的有一个TAB先例=吗?有空格将不起作用。我自己的窗口中有空格.gitconfig,一旦我用一个制表符替换了空格,cmd.exe的行为就会像预期的那样。
sjas 2012年

2
过度设计
Weapon X

取决于您使用某物的
频率

16

使用 git var仅和过滤以以下内容开头的内容alias

git var -l | grep -e "^alias"

14

如其他答案所述,git config -l列出配置文件中的所有配置详细信息。这是我的配置输出的部分示例:

...
alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
core.repositoryformatversion=0
core.filemode=false
core.bare=false
...

因此,我们可以使用以下命令grep出别名行git config -l | grep alias

alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E

我们可以通过仅cut整理alias.每行的一部分,使我们更漂亮,使用以下命令:

git config -l | grep alias | cut -c 7-

哪些打印:

force=push -f
wd=diff --color-words
shove=push -f
gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
branches=!git remote show origin | grep \w*\s*(new^|tracked) -E

最后,不要忘记将其添加为别名:

git config --global alias.la "!git config -l | grep alias | cut -c 7-"

请享用!



12

我在2018年6月用“ 概述列表-最常用的git命令 ” Git 2.18“ use --list-cmds=aliascommit 3301d36)”提到过,carej他的回答中报告。

 git --list-cmds=alias

除了或之外git config --get-regexp alias,您还可以将其输出与组合git help,其输出将随Git 2.14.x / 2.15改变:

git help co”现在说“ co is aliased to ...”,而不是“ git co is”。

参见Kaartic Sivaraam()的commit b3a8076(2017年9月12日(通过合并JUNIOÇ滨野- -提交5079cc8,2017年9月25日)sivaraam
gitster

help:更改消息以更精确

当用户尝试--help在别名命令上使用' '选项时,有关别名的信息将被打印,如下所示:

$ git co --help
`git co' is aliased to `checkout'

这似乎不正确,因为用户仅对“ co”而不是“ git co”进行了别名。
在用户使用“ tgit”之类的别名的情况下,这甚至可能是不正确的。

$ tgit co --help
`git co' is aliased to `checkout'

9

搜索或显示所有别名

添加到您的.gitconfig[alias]

aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"

那你可以做

  • git aliases -显示所有别名
  • git aliases commit -仅包含“ commit”的别名

9

我在全局中使用此别名~/.gitconfig

# ~/.gitconfig

[alias]
    aliases = !git config --get-regexp ^alias\\. | sed -e s/^alias.// -e s/\\ /\\ $(printf \"\\043\")--\\>\\ / | column -t -s $(printf \"\\043\") | sort -k 1

产生以下输出

$ git aliases
aliases   --> !git config --get-regexp ^alias\. | sed -e s/^alias.// -e s/\ /\ $(printf "\043")--\>\ / | column -t -s $(printf "\043") | sort -k 1
ci        --> commit -v
cim       --> commit -m
co        --> checkout
logg      --> log --graph --decorate --oneline
pl        --> pull
st        --> status
...       --> ...

注意:这对我在Windows上的git bash中有效。对于其他终端,您可能需要调整转义。


说明

  1. !git config --get-regexp ^alias\\. 打印git config中所有以开头的行 alias.
  2. sed -e s/^alias.//alias.从行中删除
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /将第一个出现的空格替换为\\ $(printf \"\\043\")--\\>(其值为#-->)。
  4. column -t -s $(printf \"\\043\")将所有行格式化为间距均匀的列表。$(printf \"\\043\")评估为的字符#用作分隔符。
  5. sort -k 1 根据第一列中的值对所有行进行排序

$(printf \“ \ 043 \”)

这仅会打印#用于列分隔的字符(十六进制043)。我使用这个小技巧,因此aliases 别名本身并不包含#字符。否则,它将#在打印时替换那些字符。 注意:如果您需要带文字#符号的别名,请将其更改为另一个字符。


致命:递归别名:别名
Urasquirrel

致命:文件C:/ Users / ____ /。gitconfig中错误的配置行15
Urasquirrel

@Urasquirrel:您在哪个操作系统上遇到问题?这对我来说适用于Windows上的git bash和Mac OS X(Apple Git)上的bash。
托马斯

绝对是窗户,但是一年或更久以后,我还不确定100%。
乌斯奎尔

2

有一个内置功能...尝试

$ __git_aliases

列出所有别名:)


3
您能否在示例输出中显示一个命令行示例以说明如何使用此功能?
Acumenus 2014年

内置于什么?我在msysgit中找不到这种东西。您到底在哪里找到的?
ADTC 2014年

2
既不直接从终端调用它,也不作为git的参数产生任何值输出。这是什么内建的?
2015年

4
在git bash中为我工作。$ __git_aliases返回别名列表,尽管它没有显示别名。
jaypb 2015年

1
@ADTC此答案中的代码行一个命令行示例。的$ 表示典型的Linux终端提示。在此终端中输入此行的其余部分,ENTER然后弹出并显示别名列表。由于它内置于 git中,因此可在Linux和Windows(git bash)上运行。(这可能是git在命令行上使用别名时内部使用它来解析别名的功能。)
Superole

1

如果知道别名的名称,则可以使用该--help选项来描述它。例如:

$ git sa --help
`git sa' is aliased to `stash'

$ git a --help
`git a' is aliased to `add'


0

打印出git别名的另一个git别名(称为alias):将以下内容添加到gitconfig [alias]部分:

[alias]
    # lists aliases matching a regular expression
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"

用法示例,给出完整的别名(与别名完全匹配:即^foobar$),并仅显示值:

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

或者,给regexp,它显示所有匹配的别名和值:

$ git alias 'dif.*'
alias.dif diff
alias.difs diff --staged
alias.difh diff HEAD
alias.difr diff @{u}
alias.difl diff --name-only

$ git alias '.*ing'
alias.incoming !git remote update -p; git log ..@{u}
alias.outgoing log @{u}..

注意事项:引用正则表达式以防止shell扩展成为问题,尽管在技术上(如果/当没有文件与模式匹配时)没有必要。另外:任何正则表达式都可以,但不能使用^(pattern start)和$(pattern end);它们是隐含的。假设您不使用git-alias来自git-extras

同样,您的别名显然会有所不同;这些只是我配置的一些。(也许您也会发现它们很有用。)

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.