列出Git别名

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

201859 次浏览

您可以使用--get-regexp和正则表达式^alias,即所有以alias开头的配置

git config --get-regexp ^alias

我创建了一个git别名(奇怪的是)alias正是为了这个目的…如果你经常使用混叠的话,会很方便。

# EYZ0

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

以下是在Linux、MacOSX和Windows(使用msysgit)下的工作。

使用git拉显示.gitconfig中的别名

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

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

继续阅读…

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

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

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

没有附加到别名的注释也会附加< kbd >标签< / kbd > < kbd > = < / kbd > < kbd > = < / kbd > < kbd > = < / kbd > < kbd > = < / kbd > < kbd > = < / kbd >,因此它们会显示在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=”部分匹配< kbd >标签< / kbd > < kbd > = < / kbd >

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

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

高级版:(彩色)

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

基本上与上面相同,只是添加了sed的用法来将颜色代码输入到输出中。

需要使用-R标志来获得以less显示的颜色。

(我最近发现,带有滚动条的长命令在移动设备上不能正确显示:它们的文本被切断,滚动条也不见了。这可能是这里的最后一个代码片段的情况,在查看这里的代码片段时请记住这一点。)


为什么要施展这样的魔法呢?

我有一大堆的别名,都是为我的需要量身定做的 也有一些是随时间变化,所以最好的办法是在手边有一个最新的列表是解析.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就可以获得帮助。只是一些字符,但你多久打一次?

我使用以下所有的方法,当然只有在使用快捷键的时候……

  • 添加
  • 提交
  • 提交,修改
  • 复位——硬磁头
  • 获取
  • 变基
  • 结帐
  • 分支
  • Show-branch(有很多变体)
  • shortlog
  • reflog
  • 差异(变奏)
  • 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 "..."?不包括其他的…
让事情像git aagit ca "..."在windows,
或bash别名gaa/g aagca "..."/g ca "..."在linux和mac的…

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

我是说,我们毕竟是程序员?我们的工作就是让事情按照我们需要的那样运转起来。

这是一个额外的截图,这在Windows中是有效的:

script working with cmd.exe .

好处:如果你在linux或mac上,彩色手册页可以帮助你很多:

彩色手册页

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

# EYZ0

这个答案建立在回答约翰尼的基础上。如果你没有从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文件中。

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

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


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

有一个内置的功能…试一试

$ __git_aliases

列出所有的别名:)

正如前面提到的,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

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

享受吧!

windows:

git config --list | findstr "alias"

使用git var,只过滤那些以alias开头的:

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

搜索或显示所有别名

添加到.gitconfig下的[alias]:

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

然后你就可以

  • 显示所有别名
  • git aliases commit -只有包含“承诺”的别名;

还有另一个git别名(称为alias),它打印出git别名:将以下内容添加到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}..

注意:引用regexp以防止将shell扩展为glob,尽管如果/当没有文件匹配该模式时,在技术上并不需要这样做。此外:任何regexp都可以,除了^(模式开始)和$(模式结束)不能使用;它们是隐含的。假设你没有从git-extras使用git-alias

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

我在2018年6月用“概述列表-最常用的git命令"Git 2.18使用--list-cmds=alias (提交3301年d36)", carej报告在他的回答

 git --list-cmds=alias

除此之外,或者git config --get-regexp alias,你可以将它的输出与git help结合起来,它的输出将随着Git 2.14.x/2.15而改变:

“# EYZ0"现在说的是&;co is aliased to ...",而不是&;git co is"

参见提交b3a8076(2017年9月12日)by 卡尔蒂克·西瓦拉姆(sivaraam)
(由滨野朱尼奥——gitster——提交5079年cc8合并,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'

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

(# EYZ0)


解释

  1. !git config --get-regexp ^alias\\.打印git配置中以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),用于列分隔。我使用这个小hack,所以aliases 别名本身不包含#字符。否则,它将在打印时替换这些#字符。 注意:如果你需要使用#符号的别名,请将此更改为另一个字符。

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

我喜欢@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. 显示i18n设置
  4. git show-cmd core editor显示core设置,它应该包含editor

演示

enter image description here

它在窗户上也能正常工作

解释

  • 你可以在.gitconfig上使用下面的语法编写长脚本:

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

  • echo -n -e(见更多回声)

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

    • \\033[48;: 48表示背景色。
    • \\033[38;2;255;0;0m: 38表示原色。255;0;0 =红色
  • 为了避免你的命令太长,所以只取40个字符。

  • sed -e 's/be_replace_string/new_string/'替换字符串到新字符串。(如果你想把特殊字符(如space>…)应该添加\\作为前缀。

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

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

两者都很好

1 -使用Get Regex

$ git config --get-regexp alias

2 -使用清单

$ git config --list | grep alias
  1. 打开.gitconfig文件(C:\Users\user.gitconfig)——Windows

  2. (别名)复制&粘贴下面的代码

    # EYZ0

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

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

  5. 获得所有别名的列表,而不记得代码:)

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

使用git aliases,您可以获得git别名的普通列表。 使用git get-alias <alias-name>你可以得到别名内容
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'

这个简单的解决方法对我来说很有效

  1. 为列出别名创建别名:) 李# EYZ0 < / >
  2. 执行git aliases来列出所有的其他别名
$ git alias -h


'alias' is aliased to '!git config --list | grep 'alias\.' | sed
's/alias\.\([^=]*\)=\(.*\)/\1\  => \2/' | sort'
a        => !git add . && git status
aa       => !git add . && git add -u . && git status
ac       => !git add . && git commit
acm      => !git add . && git commit -m

使用Bash列出全局和本地Git别名。即使没有安装Git,也可以正常工作。

$ cat ~/.gitconfig .git/config 2>/dev/null | sed -n '/alias/,/\[/p' | grep -v '^\['
co = checkout
br = branch
ci = commit
st = status

2>/dev/null -隐藏配置文件不存在的情况下的错误 sed -n '/alias/,/\[/p' -列出别名节
的内容 grep -v '^\[' -隐藏部分标记(它们以左方括号开始)

相同命令的Bash别名

$ alias gita="cat ~/.gitconfig .git/config 2>/dev/null | sed -n '/alias/,/\[/p' | grep -v '^\['"


$ gita
co = checkout
br = branch
ci = commit
st = status

只是添加这个,因为它太简单了,我在以前的答案中没有看到它(如果我错过了它,对不起)。

git help -a

你必须滚动到底部(使用>作为ma11hew28指出)来查看列表,例如:

Command aliases
restore-deleted      !git restore $(git ls-files -d)

如果你甚至忘记了这个开关,一个简单的git help将帮助你记住:

'git help -a'和'git help -g'列出可用的子命令和一些 概念指南。参见'git help '或'git help '

.

.