我如何打印我的git别名列表,即,类似于bash别名命令的东西?
当前回答
另一个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。
而且,显然你们的别名也会有所不同;这些只是我配置的几个。(也许你也会发现它们很有用。)
其他回答
另一个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。
而且,显然你们的别名也会有所不同;这些只是我配置的几个。(也许你也会发现它们很有用。)
另一种选择(纯粹是我觉得容易记住的东西):
Git配置——list | grep别名
$ 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
以下是在Linux、MacOSX和Windows(使用msysgit)下的工作。
使用gitla来显示.gitconfig中的别名
我听到“bash脚本”了吗?;)
关于上面评论中的“不需要”部分,我基本上为我的别名创建了一个类似概述的手册页。为什么要这么大惊小怪?那不是太过分了吗?
继续阅读…
我在.gitconfig中设置了这样的命令,分隔为TAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
并简单地定义另一个别名来grep已定义别名的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中显示的颜色。
(我最近发现,带有滚动条的长命令在移动设备上不能正确显示:它们的文本被切断,滚动条也不见了。这可能是这里的最后一个代码片段的情况,在查看这里的代码片段时请记住这一点。)
为什么要施展这样的魔法呢?
我有很多化名,都是为我量身定做的。 此外,其中一些会随着时间的推移而变化,因此,掌握最新列表的最佳方法是解析.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帮助子模块,也不需要git h子模块,只需要gh子模块就可以获得帮助。只是一些字符,但你多久打一次?
我使用以下所有的方法,当然只有在使用快捷键的时候……
添加 提交 提交,修改 复位——硬磁头 推 获取 变基 结帐 分支 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 aa或git ca“…”在windows中工作, 或者使用bash别名gaa/g aa或gca "…"/g ca "…"在Linux和mac上…
从我的需求来看,这样定制git命令似乎是一件聪明的事情…… ... 为了更容易使用,我只是帮助自己较少使用的命令,所以我不必每次都查阅手册页。命令是预定义的,查找它们非常简单。
我是说,我们毕竟是程序员?我们的工作就是让事情按照我们需要的那样运转起来。
这是一个额外的截图,这在Windows中是有效的:
好处:如果你在linux或mac上,彩色手册页可以帮助你很多:
彩色手册页
正如其他答案所提到的,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
我们可以通过删除别名来使它更漂亮。每一行的一部分,留给我们这样的命令:
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-"
享受吧!
推荐文章
- 如何在Mac上设置我的默认shell,例如Fish?
- gitignore是什么?
- Git从另一个目录克隆
- 如何在Linux虚拟机的控制台中上下滚动
- 在这个数据库中&,<<,*是什么意思?yml文件?
- 如何获得我的代码的最新版本?
- 如何在git中找到原始/master的位置,以及如何更改它?
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何在终端中提高光标速度?
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- 修改一个目录下所有文件和文件夹的权限为644/755
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?