List Git aliases

后端 未结 16 1841
暖寄归人
暖寄归人 2020-12-02 03:43

How do I print a list of my git aliases, i.e., something analogous to the bash alias command?

相关标签:
16条回答
  • 2020-12-02 03:54

    As of git 2.18 you can use git --list-cmds=alias

    0 讨论(0)
  • 2020-12-02 03:57

    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'
    
    0 讨论(0)
  • 2020-12-02 03:58

    I like @Thomas's answer, and I do some modifications.

    features:

    • add color
    • and input parameter: to let the user choose command (from git config --get-regexp ^.)
    • add filter
    # .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"
    

    USAGE

    1. git show-cmd list alias
    2. git show-cmd "" st list alias, and it should contain the string st
    3. git show-cmd i18n show i18n setting
    4. git show-cmd core editor show core setting, and it should contain editor

    DEMO

    It's working fine on windows too

    Explanation

    • 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)

      • -n = Do not output a trailing newline.
      • -e Enable interpretation of the following backslash-escaped
    • '\\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 = Red
    • cut -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

    0 讨论(0)
  • 2020-12-02 03:59

    Another alternative (purely something I find easy to remember):

    git config --list | grep alias

    0 讨论(0)
  • 2020-12-02 03:59

    for windows:

    git config --list | findstr "alias"
    
    0 讨论(0)
  • 2020-12-02 04:00

    The following works under Linux, MacOSX and Windows (with msysgit).

    Use git la to show aliases in .gitconfig

    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:

    basic version: (black/white)

      #.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:

    • all '=' are printed in red
    • all '#' are printed in green

    advanced version: (colored)

           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.)


    Why get such magic to work?

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

    • add
    • commit
    • commit --amend
    • reset --hard HEAD
    • push
    • fetch
    • rebase
    • checkout
    • branch
    • show-branch (in a lot of variations)
    • shortlog
    • reflog
    • diff (in variations)
    • log (in a lot of variations)
    • status
    • show
    • notes
    • ...

    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:

    script working with cmd.exe

    BONUS: If you are on linux or mac, colorized man pages can help you quite a bit:

    colorized man pages

    0 讨论(0)
提交回复
热议问题