列出Git别名
如何打印我的git别名列表,即与bash alias
命令类似的东西?
$ git config --get-regexp别名
为了这个目的,我创build了一个名为(奇怪的) alias
的git别名…如果足够使用别名,
$ git config --global alias.alias "config --get-regexp ^alias\."
请注意,正则expression式确保行以alias.
开头alias.
。
另一种select(纯粹是我觉得容易记住的事情):
git config --list | grep alias
这个答案build立在约翰尼的答案上 。 它适用于如果你不使用git-extras
git-alias
。
在Linux上,运行一次:
git config --global alias.alias "! git config --get-regexp ^alias\. | sed -es/^alias\.// -es/\ /\ =\ /"
这将创build一个名为alias
的永久git别名,它存储在~/.gitconfig
文件中。 使用它将以~/.gitconfig
文件中几乎相同的格式列出所有的git别名。 要使用它,请键入:
$ git alias loga = log --graph --decorate --name-status --all alias = ! git config --get-regexp ^alias\. | sed -es/^alias\.// -es/\ /\ =\ /
以下可选考虑事项适用:
-
要防止别名如上所述,append
| grep -v ^'alias '
| grep -v ^'alias '
在closures双引号之前。 我不build议这样做的Linux用户,以便他们不要忘记,命令alias
只是一个别名,不是git的function。 -
要对列出的别名进行sorting,请附加
| sort
在结束双引号之前| sort
。 或者,您可以保留~/.gitconfig
的别名。 -
要将别名添加为系统范围的别名,请将
--global
(对于当前用户)replace为--system
(对于所有用户)。 这通常在/etc/gitconfig
文件中。
下面的工作在Linux,MacOSX和Windows(带有msysgit)下。
使用git la在.gitconfig中显示别名
我听到“bash脚本”吗? ;)
关于上面评论中的“不需要”部分,我基本上创build了一个像我的别名概述的手册页。 为什么所有的大惊小怪? 这不是完整的矫枉过正?
继续阅读…
我已经在我的.gitconfig中设置了这样的命令,分隔如TAB = TAB :
[alias] alias1 = foo -x -y --z-option alias2 = bar -y --z-option --set-something
并简单地定义另一个别名来grep TAB =定义的别名的一部分。 (所有其他选项在定义中的“=”之前和之后都没有制表符,只是空格)。
没有附加到别名的注释也有一个TAB = = = = =附加,所以它们显示在grepping之后。
为了更好地查看,我将grep输出pipe道输送到更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控制台,我用terminal颜色给输出着色:
- 所有“=”都以红色打印
- 所有“#”都以绿色打印
高级版本:(彩色)
la = "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"
基本上和上面一样,只是sed用法被添加到输出的颜色代码。
需要less一些的-R
标志才能显示较less的颜色。
(我最近发现,在窗口下面有一个滚动条的长命令在移动设备上没有正确显示:它们的文本被截断,滚动条只是丢失,最后一个代码片断可能就是这种情况,当在旅途中在这里查看代码片段时,请介意)
为什么要这样的魔法工作?
我有一个半英里的别名,适合我的需要。
也有一些随着时间的推移而改变 ,所以最好有一个最新的清单在手边是parsing.gitconfig。
A ****短****我的.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
这种方式不需要inputgit help submodule
,也不需要git h submodule
,只需要gh submodule
就可以获得帮助。 这只是一些字符,但你多久打一次?
我使用以下所有内容,当然只能使用快捷方式
- 加
- 承诺
- 提交 – 美元
- 重置 – 硬头
- 推
- 取
- 变基
- 查看
- 科
- 显示分支(在很多变化)
- shortlog
- 引用日志
- 差异(在变化)
- 日志(在很多变化)
- 状态
- 显示
- 笔记
- …
这只是我的头顶。
我经常不得不使用git而不使用gui,因为很多git命令在任何graphics前端中都没有正确实现。 但是每次我把它们用起来,大部分都是一样的。
在最后一段提到的“未执行”部分:
我还没有在GUI中find与此相比的东西:
sba = show-branch --color=always -a --more=10 --no-name
– 显示所有本地和远程分支以及它们在其中的提交
ccm = "!git reset --soft HEAD~ && git commit"
– 更改上次提交消息
从更简单的angular度来看:
你多久git add .
或者git commit -am "..."
? 甚至不计算其余的…
让事情工作像git aa
或git ca "..."
在Windows中,
或与bash别名gaa
/ g aa
或gca "..."
/ g ca "..."
在Linux和Mac的…
为了我的需要,这似乎是一个聪明的事情,这样定制git命令…
…为了更容易的使用,我只是帮助自己减less使用的命令,所以我不必每次都去查阅手册页。 命令是预定义的,查找起来非常简单。
我的意思是,我们毕竟是程序员? 让我们需要的东西工作是我们的工作。
这里是一个额外的截图,这在Windows中的作品:
奖金:如果你在Linux或Mac上,彩色手册页可以帮助你很多:
彩色的手册页
正如提到的其他答案, git config -l
列出了您的configuration文件中的所有configuration细节。 以下是我的configuration输出的一个部分例子:
... 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
来清除别名行 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.
来使这个更漂亮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-"
请享用!
使用git var
并只过滤那些以alias
开头的alias
:
git var -l | grep -e "^alias"
对于Windows:
git config --list | findstr "alias"
search或显示所有别名
添加到你的.gitconfig
下的[alias]
:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
那你可以做
-
git aliases
– 显示所有别名 -
git aliases commit
– 只有包含“提交”
如果您知道别名的名称,则可以使用--help
选项来描述它。 例如:
$ git sa --help `git sa' is aliased to `stash' $ git a --help `git a' is aliased to `add'
有一个内置的function…尝试
$ __git_aliases
列出所有的别名:)
又一个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}..
警告:引用正则expression式来防止shell扩展为glob,尽pipe在没有文件匹配模式的情况下在技术上不是必需的。 此外:任何正则expression式都很好,除了^
(模式开始)和$
(模式结束)不能使用; 它们是隐含的。 假设你不使用git-extras
git-alias
。
另外,显然你的别名会有所不同。 这些只是我configuration的一些。 (也许你会发现它们也很有用。)
除了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
) 提交的b3a8076 (2017年9月12日) 。
(由Junio C gitster
合并- gitster
-在承诺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'