【问题标题】:List Git aliases列出 Git 别名
【发布时间】:2011-10-27 08:04:25
【问题描述】:

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

【问题讨论】:

  • @MattDiPasquale - 我认为下面的最佳答案有效,也许你应该接受它?
  • @domoarigato 谢谢。我很抱歉没有接受答案。我就是这么做的。
  • 它可能是有用问题的候选者,该问题最长没有被接受的答案:) :P
  • @domoarigato 哈哈。嗯,谢谢。 :-)

标签: git terminal alias


【解决方案1】:
$ git config --get-regexp 别名

【讨论】:

  • 学究气,应该是'^alias\.'
  • 或者只是git config -e,然后用你的眼睛找到[alias]部分。但是 git 粉丝似乎总是会投入一些 bash 脚本或正则表达式匹配来解决他们的问题,即使没有必要:)
  • git config -e 仅编辑 .git/config 文件。但是我的大部分别名都是在全局~/.gitconfig中定义的。
  • 实际上,应该是git config --global alias.aliases config --get-regexp '^alias\.'" ...然后是git aliases
  • @DerekGreer 你在某处错过了"
【解决方案2】:

此答案基于johnny 的answer。如果您不使用来自git-extras 的git-alias,则适用。

在 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 '。我不建议这样做,所以用户不要忘记命令 alias 只是一个别名,不是 git 的功能。

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

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

【讨论】:

  • 我喜欢这个,因为它去掉了每行开头的alias.
  • 不知道为什么,但这个答案对我不起作用。我不断收到fatal: bad config。 Git-extra 的解决方案确实对我有用:github.com/tj/git-extras/blob/master/bin/git-alias
  • @Ashitaka,试试限定版,例如git config --global alias.alias "! git config --get-regexp ^alias\."。或者,使用git version 确保您拥有当前版本的 git。
  • 这真是一部很棒的作品,并且以一种非常实用的方式将它们组合在一起!
  • 我相信你可以摆脱“!git”部分,这基本上是相互撤消的。见Git Aliases的结尾部分
【解决方案3】:

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

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

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

【讨论】:

  • 我添加了一个answer,它略微建立在这个答案的基础上。
  • 我建议--system 而不是--global 因为这样的东西在系统级别更有用,而不是用户级别。
  • 喜欢这个。你达你达最好
  • 如果你想直接将它添加到你的 gitconfig 中,它必须是这样的:alias = config --get-regexp ^alias\\..
  • git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"怎么样
【解决方案4】:

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

git config --list | grep alias

【讨论】:

  • 说到好记,你还不如create the alias alias一次,然后忘记你甚至创建它。
  • 您可以使用-l 作为--list 的便捷快捷方式,但我喜欢创建别名来列出别名的想法。
  • 很好的解决方案,但最好使用带有正则表达式的 grep 来生成以别名开头的行,以防某些配置以某种方式包含关键字别名:git config --list | grep -E '^alias'
【解决方案5】:

以下内容适用于 Linux、MacOSX 和 Windows(使用 msysgit)。

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

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

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

继续阅读...

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

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

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

未附加到别名的注释也有 TAB=== == 附加,所以它们在 grepping 之后显示。

为了更好地查看,我将 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 标志是获取less 中显示的颜色所必需的。

(我最近发现,在移动设备上无法正确显示窗口下方带有滚动条的长命令:它们的文本被截断,滚动条完全丢失。最后一个代码可能就是这种情况 sn-p在这里,在旅途中查看代码 sn-ps 时请记住这一点。)


为什么要让这种魔法发挥作用?

我有大约半英里的别名,根据我的需要量身定制。
还有一些随着时间的推移而变化,所以手头有一个最新列表的最好办法是解析 .gitconfig。

我的 .gitconfig 别名的 ****short**** 摘录:

    #  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
  • 推
  • 获取
  • 变基
  • 结帐
  • 分支
  • show-branch(有很多变体)
  • 短日志
  • 重新登录
  • 差异(变体)
  • 日志(有很多变体)
  • 状态
  • 显示
  • 注释
  • ...

这只是我的想法。

我经常不得不在没有 gui 的情况下使用 git,因为许多 git 命令在任何图形前端都没有正确实现。但每次我使用它们时,它的方式几乎都是一样的。

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

从更简单的角度来看:
您多久输入一次git add . 或git commit -am "..."?连其余的都不算...
在 Windows 中让事情像 git aa 或 git ca "..." 一样工作,
或者在 linux 和 mac 上使用 bash 别名 gaa/g aa 或 gca "..."/g ca "..."...

根据我的需要,定制这样的 git 命令似乎是一件明智的事情......
...而且为了更容易使用,我只是帮助自己使用较少使用的命令,所以我不必每次都查阅手册页。命令是预定义的,查找它们尽可能简单。

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

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

奖励:如果您使用的是 linux 或 mac,彩色手册页可以帮助您很多:

colorized man pages

【讨论】:

  • 我无法让它与 Windows 一起使用。输出为空白,例如la = "!grep '\t=' ~/.gitconfig | less"
  • @Wilhelmsen :您是否可能从上面的列表中复制并粘贴了内容?你真的有一个TAB 在每个= 之前吗?使用空格将无法正常工作。我自己的 Windows .gitconfig 中有空格,一旦我用单个制表符替换它们,cmd.exe 的行为就像预期的那样。
  • 过度工程
  • 取决于你使用某物的频率
【解决方案6】:

正如其他答案所述,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 grep 出别名行:

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

我们可以通过在每一行的cutting 出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】:

    使用git var 并仅过滤以alias 开头的那些:

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

    【讨论】:

      【解决方案8】:

      我在 2018 年 6 月用“overview list - most used git commands”提到了 Git 2.18“使用 --list-cmds=alias (commit 3301d36)”,carej 在 his answer 中报告。

       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 (sivaraam) 的commit b3a8076(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'
      

      【讨论】:

        【解决方案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\")--\\&gt;\\ / 将第一次出现的空格替换为 \\ $(printf \"\\043\")--\\&gt;(其计算结果为 #--&gt;)。
        4. column -t -s $(printf \"\\043\") 将所有行格式化为一个均匀分布的列表。计算结果为# 的字符$(printf \"\\043\") 用作分隔符。
        5. sort -k 1 根据第一列中的值对所有行进行排序

        $(printf \"\043\")

        这只是打印用于列分离的字符#(十六进制043)。我使用了这个小技巧,所以 aliases alias 本身实际上并不包含 # 字符。否则它将在打印时替换那些# 字符。 注意:如果您需要带有文字 # 符号的别名,请将其更改为另一个字符。

        【讨论】:

          【解决方案10】:

          对于窗户:

          git config --list | findstr "alias"
          

          【讨论】:

            【解决方案11】:

            搜索或显示所有别名

            在[alias] 下添加到您的.gitconfig:

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

            那你就可以了

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

            【讨论】:

              【解决方案12】:

              两者都很好

              1 - 使用获取正则表达式

              $ git config --get-regexp alias
              

              2 - 使用列表

              $ git config --list | grep alias
              

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                • 他们只返回别名 cmd,而不是它的内容。有没有办法得到它?
                【解决方案14】:

                我喜欢@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

                演示

                在 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、&gt; ...)应添加\\作为前缀。

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

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

                【讨论】:

                • 这个link 是另一个颜色示例。
                【解决方案15】:

                有一个内置函数...试试

                $ __git_aliases
                

                列出所有别名:)

                【讨论】:

                • 您能否展示一个如何使用它的命令行示例以及示例输出?
                • 内置于什么?我在 msysgit 中找不到这种类型的东西。你到底是在哪里找到这个的?
                • 直接从终端调用它或作为 git 的参数都不会产生任何值的输出。这到底是什么内置的?
                • 在 git bash 中为我工作。 $ __git_aliases 返回一个别名列表,尽管它没有显示它们的别名。
                • @ADTC 这个答案中的代码行是一个命令行示例。 $ 表示典型的 linux 终端提示符。将此行的其余部分输入这样的终端并点击ENTER,然后会出现您的别名列表。适用于 Linux 和 Windows(git bash),因为它是 git 的 内置。 (这可能是 git 在命令行使用别名时在内部使用的一个函数。)
                【解决方案16】:

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

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

                【讨论】:

                  【解决方案17】:

                  另一个打印出 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
                  

                  或者,给出正则表达式,它显示所有匹配的别名和值:

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

                  注意事项:引用正则表达式以防止外壳扩展为全局,尽管如果/当没有文件与模式匹配时,这在技术上不是必需的。另外:任何正则表达式都可以,除了不能使用^(模式开始)和$(模式结束);它们是隐含的。假设您没有使用来自git-extras 的git-alias。

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

                  【讨论】:

                    【解决方案18】:
                    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. 在不记住代码的情况下获取所有别名列表:)

                    【讨论】:

                      【解决方案19】:

                      这里是我的社区别名:git aliases 和 git get-alias

                      使用git aliases,您可以获得 git 别名的简单列表。 使用git get-alias &lt;alias-name&gt;,您可以获得别名内容。

                      git config --global alias.aliases '!f() { git config --get-regexp "^alias\." | cut -d " " -f 1 | cut -d "." -f 2 ; }; f'
                      
                      git config --global alias.get-alias '!f() { git config --get-regexp "^alias\." | grep $1 ; }; f'
                      

                      【讨论】:

                        猜你喜欢
                        • 2020-01-26
                        • 2011-04-30
                        • 1970-01-01
                        • 1970-01-01
                        • 2015-11-08
                        • 2020-10-21
                        • 2015-07-01
                        • 1970-01-01
                        • 2016-07-06
                        相关资源
                        最近更新 更多