列出Git别名

时间:2011-08-15 14:45:51

标签: git terminal alias

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

18 个答案:

答案 0 :(得分:432)

$ git config --get-regexp alias

答案 1 :(得分:133)

为了这个目的,我创建了一个名为(奇怪的是)alias的git别名......如果你足够使用别名,我会不时使用...

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

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

答案 2 :(得分:72)

另一种选择(纯粹是我容易记住的东西):

git config --list | grep alias

答案 3 :(得分:55)

此答案建立在answer johnny之上。如果您未使用git-alias中的git-extras,则适用。

在Linux上,运行一次:

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

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

$ 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 '。我不建议Linux用户这样做,这样他们就不会忘记命令alias只是别名而不是git的功能。

  • 要对列出的别名进行排序,请在结束双引号之前附加| sort。或者,您可以将别名保留在~/.gitconfig已排序。

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

答案 4 :(得分:26)

以下适用于Linux,MacOSX和Windows(使用msysgit)。

使用 git la 在.gitconfig

中显示别名

我听过'bash脚本'了吗? ;)

关于上面评论中的“不需要”部分,我基本上创建了一个类似于别名概述的手册页。为什么大惊小怪呢?是不是完全矫枉过正?

继续阅读...

我在.gitconfig中设置了这样的命令,分隔为 TAB = TAB :< / p>

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

并简单地定义另一个别名来grep TAB = 部分定义的别名。 (所有其他选项在其定义中的'='之前和之后都没有选项卡,只有空格。)

未附加到别名的注释也有 TAB = = = 附加了 = ,因此在点击后会显示它们。

为了更好地查看,我将grep输出换成less,如下所示:

基本版:(黑/白)

  #.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 用法,以便将颜色代码输入到输出中。

less -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即可获得帮助。这只是一些角色,但你多久输入一次?

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

  • 添加
  • 提交
  • commit --amend
  • reset --hard HEAD
  • 变基
  • 结帐
  • 分支
  • show-branch(有很多变化)
  • shortlog
  • 引用日志
  • diff(在变体中)
  • log(有很多变化)
  • 状态
  • 显示
  • 注释
  • ...

这只是我的头脑。

我经常不得使用没有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 "..."?不计算其余的......
让事情变得像Windows git aagit ca "..."一样有效 或者在linux和Mac上使用bash别名gaa / g aagca "..." / g ca "..." ...

根据我的需要,这样做似乎很明智,可以像这样定制git命令...... ...为了更容易使用我只是帮助自己使用较少的命令,所以我不必每次都查阅手册页。命令是预定义的,并且查找起来非常简单。

我的意思是,毕竟我们是程序员?按照我们需要的方式开展工作是我们的工作。

这是一个额外的屏幕截图,适用于Windows:

script working with cmd.exe

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

<强> colorized man pages

答案 5 :(得分:16)

使用git var并仅过滤以git var -l | grep -e "^alias" 开头的那些:

clarity

答案 6 :(得分: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
...

因此我们可以使用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-"

享受!

答案 7 :(得分:9)

for windows:

git config --list | findstr "alias"

答案 8 :(得分:9)

搜索或显示所有别名

添加到.gitconfig下的[alias]

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

然后你可以做

  • git aliases - 显示所有别名
  • git aliases commit - 仅包含&#34; commit&#34;
  • 的别名

答案 9 :(得分:7)

我在全局~/.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
...       --> ...

注意:这适用于我在 git bash on Windows 。对于其他终端,您可能需要调整转义。

说明

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

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

答案 10 :(得分:3)

除了git config --get-regexp alias之外,您还可以将其输出与git help结合使用,其输出将随Git 2.14.x / 2.15而变化:

  

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

commit b3a8076Kaartic Sivaraam (sivaraam)(2017年9月12日) Junio C Hamano -- gitster --合并于commit 5079cc8,2017年9月25日)

  

help:更改消息更精确

     

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

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

这似乎不正确,因为用户的别名仅为“co”,而非“git co”。
  在用户使用“tgit”等别名的情况下,这甚至可能不正确。

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

答案 11 :(得分:2)

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

$ __git_aliases

列出所有别名:)

答案 12 :(得分:2)

两者都很好

1 - 使用获取正则表达式

$ git config --get-regexp alias

2 - 使用列表

$ git config --list | grep alias

答案 13 :(得分:1)

如果您知道别名的名称,可以使用--help选项对其进行描述。例如:

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

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

答案 14 :(得分:1)

从git 2.18开始,您可以使用git --list-cmds=alias

答案 15 :(得分:1)

我喜欢@Thomas的答案,并且做了一些修改。

功能:

  • 添加颜色
  • 并输入参数:让用户选择命令(来自git config --get-regexp ^.
  • 添加过滤器
# .gitconfig

[alias]
    show-cmd = "!f() { \
        sep="㊣" ;\
        name=${1:-alias};\
        echo -n -e '\\033[48;2;255;255;01m' ;\
        echo -n -e '\\033[38;2;255;0;01m' ;\
        echo "$name"; \
        echo -n -e '\\033[m' ;\
        git config --get-regexp ^$name\\..*$2+ | \
        cut -c 1-40 | \
        sed -e s/^$name.// \
        -e s/\\ /\\ $(printf $sep)--\\>\\ / | \
        column -t -s $(printf $sep) | \
        sort -k 1 ;\
    }; f"

用法

  1. git show-cmd列表别名
  2. git show-cmd "" st列表别名,它应包含字符串st
  3. git show-cmd i18n显示i18n设置
  4. git show-cmd core editor显示core设置,其中应包含editor

演示

enter image description here

在Windows上也可以正常工作

说明

  • 您可以使用以下语法在.gitconfig上写长脚本:

    [alias]
        your-cmd = "!f() { \
            \
        }; f"
    
  • name=${1:-alias}name = $1 if $1 else -alias

  • echo -n -e(更多echo

    • -n =不输出尾随换行符。
    • -e启用对以下反斜杠转义的解释
  • '\\033[38;2;255;0;01m'(更多SGR parameters

    • \\033[48;:48表示背景颜色。
    • \\033[38;2;255;0;0m:38表示前景色。 255; 0; 0 =红色
  • cut -c 1-40为避免您的命令过长,请仅使用40个字符。

  • sed -e 's/be_replace_string/new_string/'将字符串替换为新字符串。 (如果要放入特殊字符(例如space> ...),则应添加\\作为前缀。

  • column -t -s $(printf $sep)将所有行格式化为间距均匀的列表。

  • sort -k 1根据第一列中的值对所有行进行排序

答案 16 :(得分:0)

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

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

示例用法,给出完整的别名(完全匹配别名:ie ^foobar$),只显示值:

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

或者,给regexp,它显示所有匹配的别名&amp;价值观:

$ 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}..

警告:引用regexp以防止shell扩展为glob,尽管如果/当没有文件与模式匹配时,技术上不需要。另外:任何正则表达式都没问题,除了^(模式开始)和$(模式结束)不能使用;他们暗示着。假设您没有使用git-alias中的git-extras

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

答案 17 :(得分:0)

  1. 打开 .gitconfig 文件 (C:\Users\user.gitconfig) --Windows

  2. [别名]下复制并粘贴以下代码

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

  3. 在终端 git alias -- 列出所有别名

  4. 在终端 git alias commit -- 列出所有与提交相关的别名

  5. 在不记住代码的情况下获取所有别名的列表:)