I created a git alias called (strangely enough) alias
for exactly this purpose... handy from time to time if you use aliasing enough...
$ git config --global alias.alias "config --get-regexp ^alias\."
Note, the regex makes sure the line starts with alias.
.
Both Works Well
1 - Using Get Regex
$ git config --get-regexp alias
2 - Using list
$ git config --list | grep alias
As other answers mentioned, git config -l
lists all your configuration details from your config file. Here's a partial example of that output for my 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
...
So we can grep out the alias lines, using 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
We can make this prettier by just cut
ting out the alias.
part of each line, leaving us with this command:
git config -l | grep alias | cut -c 7-
Which prints:
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
Lastly, don't forget to add this as an alias:
git config --global alias.la "!git config -l | grep alias | cut -c 7-"
Enjoy!
Using git var
and filtering only those that start with alias
:
git var -l | grep -e "^alias"
I use this alias in my global ~/.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
to produce the following output
$ 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
... --> ...
(Note: This works for me in git bash on Windows. For other terminals you may need to adapt the escaping.)
!git config --get-regexp ^alias\\.
prints all lines from git config that start with alias.
sed -e s/^alias.//
removes alias.
from the linesed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /
replaces the first occurrence of a space with \\ $(printf \"\\043\")--\\>
(which evaluates to #-->
).column -t -s $(printf \"\\043\")
formats all lines into an evenly spaced column table. The character $(printf \"\\043\")
which evaluates to #
is used as separator.sort -k 1
sorts all lines based on the value in the first column$(printf \"\043\")
This just prints the character #
(hex 043) which is used for column separation. I use this little hack so the aliases
alias itself does not literally contain the #
character. Otherwise it would replace those #
characters when printing.
Note: Change this to another character if you need aliases with literal #
signs.
Another alternative (purely something I find easy to remember):
git config --list | grep alias
Yet another git
alias (called alias
) that prints out git aliases: add the following to your gitconfig [alias]
section:
[alias]
# lists aliases matching a regular expression
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Example usage, giving full alias name (matches alias name exactly: i.e., ^foobar$
), and simply shows the value:
$ git alias st
alias.st status -s
$ git alias dif
alias.dif diff
Or, give regexp, which shows all matching aliases & values:
$ 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}..
Caveats: quote the regexp to prevent shell expansion as a glob, although it's not technically necessary if/when no files match the pattern. Also: any regexp is fine, except ^
(pattern start) and $
(pattern end) can't be used; they are implied. Assumes you're not using git-alias
from git-extras
.
Also, obviously your aliases will be different; these are just a few that I have configured. (Perhaps you'll find them useful, too.)
There is a built-in function... try
$ __git_aliases
lists all the aliases :)
I mentioned in June 2018 with "overview list - most used git commands" the Git 2.18 "use --list-cmds=alias
(commit 3301d36)", that carej reports in his answer.
git --list-cmds=alias
In addition of that or of git config --get-regexp alias
, you can combine its output with git help
, whose output will change with Git 2.14.x/2.15:
"
git help co
" now says "co is aliased to ...
", not "git co is
".
See commit b3a8076 (12 Sep 2017) by Kaartic Sivaraam (sivaraam
).
(Merged by Junio C Hamano -- gitster
-- in commit 5079cc8, 25 Sep 2017)
help
: change a message to be more preciseWhen the user tries to use '
--help
' option on an aliased command information about the alias is printed as shown below:
$ git co --help
`git co' is aliased to `checkout'
This doesn't seem correct as the user has aliased only '
co
' and not 'git co
'.
This might even be incorrect in cases in which the user has used an alias like 'tgit
'.
$ tgit co --help
`git co' is aliased to `checkout'
Add to your .gitconfig
under [alias]
:
aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"
Then you can do
git aliases
- show ALL aliasesgit aliases commit
- only aliases containing "commit"If you know the name of the alias, you can use the --help
option to describe it. For example:
$ git sa --help
`git sa' is aliased to `stash'
$ git a --help
`git a' is aliased to `add'
Did I hear 'bash scripting'? ;)
About the 'not needed' part in a comment above, I basically created a man page like overview for my aliases. Why all the fuss? Isn't that complete overkill?
Read on...
I have set the commands like this in my .gitconfig, separated like TAB=TAB:
[alias]
alias1 = foo -x -y --z-option
alias2 = bar -y --z-option --set-something
and simply defined another alias to grep the TAB= part of the defined aliases. (All other options don't have tabs before and after the '=' in their definition, just spaces.)
Comments not appended to an alias also have a TAB===== appended, so they are shown after grepping.
For better viewing I am piping the grep output into less, like this:
#.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"
The '\t=
' part matches TAB=.
To have an even better overview of what aliases I have, and since I use the bash console, I colored the output with terminal colors:
la = "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"
Basically the same as above, just sed usage is added to get the color codes into the output.
The -R
flag of less is needed to get the colors shown in less.
(I recently found out, that long commands with a scrollbar under their window are not shown correctly on mobile devices: They text is cut off and the scrollbar is simply missing. That might be the case with the last code snippet here, keep that in mind when looking at code snippets here while on the go.)
I have a like half a mile of aliases, tailored to my needs.
Also some of them change over time, so after all the best idea to have an up-to-date list at hand is parsing the .gitconfig.
A ****short**** excerpt from my .gitconfig aliases:
# 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
In my linux or mac workstations also further aliases exist in the .bashrc's, sort of like:
#.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
That way no need to type git help submodule
, no need for git h submodule
, just gh submodule
is all that is needed to get the help. It is just some characters, but how often do you type them?
I use all of the following, of course only with shortcuts...
This was just from the top of my head.
I often have to use git without a gui, since a lot of the git commands are not implemented properly in any of the graphical frontends. But everytime I put them to use, it is mostly in the same manner.
On the 'not implemented' part mentioned in the last paragraph:
I have yet to find something that compares to this in a GUI:
sba = show-branch --color=always -a --more=10 --no-name
- show all local and remote branches as well as the commits they have within them
ccm = "!git reset --soft HEAD~ && git commit"
- change last commit message
From a point of view that is more simple:
How often do you type git add .
or git commit -am "..."
? Not counting even the rest...
Getting things to work like git aa
or git ca "..."
in windows,
or with bash aliases gaa
/g aa
or gca "..."
/g ca "..."
in linux and on mac's...
For my needs it seemed a smart thing to do, to tailor git commands like this...
... and for easier use I just helped myself for lesser used commands, so i dont have to consult the man pages everytime. Commands are predefined and looking them up is as easy as possible.
I mean, we are programmers after all? Getting things to work like we need them is our job.
Here is an additional screenshot, this works in Windows:
for windows:
git config --list | findstr "alias"
As of git 2.18 you can use git --list-cmds=alias
$ git config --get-regexp alias
I like @Thomas's answer, and I do some modifications.
features:
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"
git show-cmd
list aliasgit show-cmd "" st
list alias, and it should contain the string st
git show-cmd i18n
show i18n
settinggit show-cmd core editor
show core
setting, and it should contain editor
It's working fine on windows too
you can write the long script on .gitconfig
use the syntax as below:
[alias]
your-cmd = "!f() { \
\
}; f"
name=${1:-alias}
same as name = $1 if $1 else -alias
echo -n -e
(see more echo)
'\\033[38;2;255;0;01m'
(see more SGR parameters)
\\033[48;
: 48 means background color.\\033[38;2;255;0;0m
: 38 means fore color. 255;0;0 = Redcut -c 1-40
To avoid your command is too long, so take 40 char only.
sed -e 's/be_replace_string/new_string/'
replace string to new string. (if you want to put the special-char(such as space
, >
...) should add \\
as the prefix.
column -t -s $(printf $sep)
formats all lines into an evenly spaced column table.
sort -k 1
sorts all lines based on the value in the first column
Source: Stackoverflow.com