Liệt kê bí danh Git


444

Làm cách nào để in danh sách các bí danh git của tôi, nghĩa là, một cái gì đó tương tự với aliaslệnh bash ?



7
@MattDiPasquale - Tôi nghĩ rằng câu trả lời hàng đầu dưới đây hoạt động, có lẽ bạn nên chấp nhận nó?
domoarigato

@domoarigato Cảm ơn bạn. Tôi xin lỗi vì đã không chấp nhận một câu trả lời. Tôi chỉ làm như vậy.
ma11hew28

Nó có thể là một ứng cử viên cho câu hỏi hữu ích, đã đi mà không có câu trả lời được chấp nhận lâu nhất :): P
domoarigato

@domoarigato Hah. Vậy, cám ơn. :-)
ma11hew28

Câu trả lời:


124

Câu trả lời này được xây dựng dựa trên câu trả lời của johnny . Nó áp dụng nếu bạn không sử dụng git-aliastừ git-extras.

Trên Linux, hãy chạy một lần:

git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"

Điều này sẽ tạo ra một bí danh git vĩnh viễn có tên aliasđược lưu trữ trong ~/.gitconfigtệp của bạn . Sử dụng nó sẽ liệt kê tất cả các bí danh git của bạn, ở định dạng gần giống như chúng có trong ~/.gitconfigtệp. Để sử dụng nó, gõ:

$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /

Những cân nhắc sau đây được áp dụng:

  • Để ngăn bí danh aliaskhỏi danh sách như trên, hãy thêm vào | grep -v ^'alias 'trước khi trích dẫn kép. Tôi không khuyến nghị điều này để người dùng đừng quên rằng lệnh aliasnày chỉ là bí danh và không phải là một tính năng của git.

  • Để sắp xếp các bí danh được liệt kê, hãy thêm vào | sorttrước khi trích dẫn kép. Ngoài ra, bạn có thể giữ bí danh trong ~/.gitconfigsắp xếp.

  • Để thêm bí danh dưới dạng bí danh trên toàn hệ thống, hãy thay thế --global(cho người dùng hiện tại) bằng --system(cho tất cả người dùng). Điều này thường đi trong /etc/gitconfigtập tin.


3
Tôi thích cái này vì nó được loại bỏ alias.ở đầu mỗi dòng
Brian J

3
Không chắc chắn tại sao, nhưng câu trả lời này không làm việc cho tôi. Tôi tiếp tục nhận được fatal: bad config. Giải pháp của Git-Extra thực sự hiệu quả với tôi: github.com/tj/git-extras/blob/master/bin/git-alias
Ashitaka

1
@Ashitaka, hãy thử một phiên bản giới hạn, vd git config --global alias.alias "! git config --get-regexp ^alias\.". Ngoài ra, đảm bảo git versionrằng bạn đã có phiên bản hiện tại của git.
Acumenus

Đây thực sự là một công việc tuyệt vời và kết hợp tất cả lại với nhau một cách cực kỳ có thể sử dụng được!
UpAndAdam

Tôi tin rằng bạn có thể thoát khỏi phần "! Git", về cơ bản là hoàn tác lẫn nhau. Xem phần kết thúc của Git Aliases
Daniel Stevens

489
$ git config - bí danh regget

39
Để trở thành nhà mô phạm, điều đó nên là'^alias\.'
Josh Lee

27
Hoặc chỉ git config -evà sau đó sử dụng đôi mắt của bạn để tìm [alias]phần. Nhưng những người hâm mộ git dường như luôn ném vào một chút kịch bản bash hoặc kết hợp biểu thức chính quy để giải quyết vấn đề của họ, ngay cả khi không cần thiết :)
MatrixFrog

39
git config -eChỉ chỉnh sửa .git/configtệp. Nhưng hầu hết các bí danh của tôi được xác định trong toàn cầu ~/.gitconfig.
Boldewyn

21
Để thực tế, đó phải là git config --global alias.aliases config --get-regexp '^alias\.'"... và sau đógit aliases
Derek Greer

6
@DerekGreer bạn đang thiếu một "nơi nào đó
Jake Berger

147

Tôi đã tạo ra một bí danh git được gọi là (đủ kỳ lạ) aliascho chính xác mục đích này ... đôi khi có ích nếu bạn sử dụng bí danh đủ ...

$ git config --global alias.alias "config --get-regexp ^alias\."

Lưu ý, regex đảm bảo dòng bắt đầu bằng alias..


Tôi đã thêm một câu trả lời dựa trên câu trả lời này.
Acumenus

1
Tôi đề nghị --systemthay vì --globalmột cái gì đó như thế này hữu ích hơn ở cấp hệ thống, không phải ở cấp độ người dùng.
ADTC

1
Thích cái này. You da You da best
Charles Watson

2
Và nếu bạn muốn thêm nó trực tiếp vào gitconfig của mình thì nó phải như thế này : alias = config --get-regexp ^alias\\..
marczych

Làm thế nào vềgit config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Keith Robertson

84

Một cách khác (hoàn toàn là thứ tôi thấy dễ nhớ):

git config --list | grep alias


8
Nói về việc dễ nhớ, bạn cũng có thể tạo aliasbí danh một lần và sau đó quên bạn thậm chí đã tạo nó.
Acumenus

3
Bạn có thể sử dụng -lnhư một phím tắt thuận tiện cho --listnhưng tôi thích ý tưởng tạo bí danh để liệt kê các bí danh.
ADTC

1
Giải pháp tốt, nhưng tốt hơn là sử dụng grep với regex để tạo ra các dòng bắt đầu bằng bí danh trong trường hợp một số cấu hình bằng cách nào đó có chứa bí danh từ khóa:git config --list | grep -E '^alias'
MasterMind

28

Các hoạt động sau đây trong Linux, MacOSX và Windows (với msysgit).

Sử dụng git la để hiển thị bí danh trong .gitconfig

Tôi có nghe thấy 'bash scripting không? ;)

Về phần 'không cần thiết' trong một nhận xét ở trên, về cơ bản tôi đã tạo một trang nam như tổng quan cho các bí danh của mình. Tại sao tất cả những ồn ào? Đó không phải là quá mức cần thiết?

Đọc trên ...

Tôi đã đặt các lệnh như thế này trong .gitconfig, được phân tách như TAB=TABsau:

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

và chỉ cần định nghĩa một bí danh khác để grep TAB= phần của các bí danh đã xác định. (Tất cả các tùy chọn khác không có tab trước và sau '=' trong định nghĩa của chúng, chỉ là khoảng trắng.)

Nhận xét không được thêm vào bí danh cũng có một TAB=====phụ lục, vì vậy chúng được hiển thị sau khi grepping.

Để xem tốt hơn, tôi đang chuyển đầu ra grep thành ít hơn, như thế này:

phiên bản cơ bản: (đen / trắng)

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

Phần ' \t=' khớp TAB=.

Để có cái nhìn tổng quan hơn nữa về những bí danh tôi có, và vì tôi sử dụng bảng điều khiển bash, tôi đã tô màu đầu ra bằng các màu của thiết bị đầu cuối:

  • tất cả '=' được in màu đỏ
  • tất cả '#' được in màu xanh lá cây

phiên bản nâng cao: (màu)

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

Về cơ bản giống như trên, chỉ cần sử dụng sed để thêm mã màu vào đầu ra.

Các -Rlá cờ của ít là cần thiết để có được màu sắc thể hiện trong ít hơn.

(Gần đây tôi phát hiện ra rằng các lệnh dài có thanh cuộn dưới cửa sổ của chúng không được hiển thị chính xác trên thiết bị di động: Văn bản của chúng bị cắt và thanh cuộn bị thiếu. Đó có thể là trường hợp với đoạn mã cuối cùng ở đây, hãy giữ nguyên lưu ý khi xem các đoạn mã ở đây khi đang di chuyển.)


Tại sao có được phép thuật như vậy để làm việc?

Tôi có một nửa dặm bí danh, phù hợp với nhu cầu của tôi.
Ngoài ra, một số trong số chúng thay đổi theo thời gian , vì vậy sau tất cả ý tưởng tốt nhất để có một danh sách cập nhật trong tay là phân tích cú pháp .gitconfig.

Một đoạn trích **** ngắn **** từ các bí danh .gitconfig của tôi:

    #  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

Trong các máy trạm linux hoặc mac của tôi cũng tồn tại thêm các bí danh trong .bashrc, giống như:

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

Cách đó không cần gõ git help submodule, không cần git h submodule, chỉ gh submodulelà tất cả những gì cần thiết để nhận được sự giúp đỡ. Nó chỉ là một số ký tự, nhưng bạn có thường xuyên gõ chúng không?

Tôi sử dụng tất cả những điều sau đây, tất nhiên chỉ với các phím tắt ...

  • thêm vào
  • cam kết
  • cam kết --amend
  • đặt lại - đầu trang
  • đẩy
  • lấy
  • nổi loạn
  • Thủ tục thanh toán
  • chi nhánh
  • chi nhánh hiển thị (trong rất nhiều biến thể)
  • shortlog
  • từ chối
  • khác biệt (trong các biến thể)
  • đăng nhập (trong rất nhiều biến thể)
  • trạng thái
  • chỉ
  • ghi chú
  • ...

Đây chỉ là từ đỉnh đầu của tôi.

Tôi thường phải sử dụng git mà không có gui, vì rất nhiều lệnh git không được triển khai đúng trong bất kỳ giao diện đồ họa nào. Nhưng mỗi khi tôi đưa chúng vào sử dụng, nó chủ yếu theo cách tương tự.

Về phần 'không được triển khai' được đề cập trong đoạn cuối:
Tôi vẫn chưa tìm thấy thứ gì đó so sánh với điều này trong GUI:
sba = show-branch --color=always -a --more=10 --no-name- hiển thị tất cả các nhánh cục bộ và từ xa cũng như các cam kết họ có trong chúng
ccm = "!git reset --soft HEAD~ && git commit"- thay đổi thông báo cam kết cuối cùng

Từ quan điểm đơn giản hơn:
Bạn có thường xuyên gõ git add .hay git commit -am "..."không? Không tính ngay cả phần còn lại ...
Bắt mọi thứ hoạt động như git aahoặc git ca "..."trong windows,
hoặc với bí danh bash gaa/ g aahoặc gca "..."/ g ca "..."trong linux và trên mac ...

Đối với nhu cầu của tôi, có vẻ như là một điều thông minh để làm, để điều chỉnh các lệnh git như thế này ...
... và để dễ sử dụng hơn, tôi chỉ giúp bản thân mình cho các lệnh ít sử dụng hơn, vì vậy tôi không phải tham khảo các trang hướng dẫn mọi lúc. Các lệnh được xác định trước và tìm kiếm chúng dễ dàng nhất có thể.

Ý tôi là, chúng ta là những lập trình viên? Bắt mọi thứ để làm việc như chúng ta cần chúng là công việc của chúng ta.

Đây là một ảnh chụp màn hình bổ sung, điều này hoạt động trong Windows:

tập lệnh làm việc với cmd.exe

THƯỞNG: Nếu bạn đang ở trên linux hoặc mac, các trang man được tô màu có thể giúp bạn khá nhiều:

trang người đàn ông màu


1
Tôi không thể làm điều này để làm việc với Windows. Các đầu ra là trống cho ví dụla = "!grep '\t=' ~/.gitconfig | less"
chwi

1
@Wilemussen: Bạn có thể sao chép và dán những thứ từ danh sách trên không? Bạn có thực sự có một TABpreceeding mỗi =? Với không gian, nó sẽ không hoạt động. Tôi đã có không gian trong các cửa sổ của .gitconfigmình, một khi tôi thay thế chúng bằng một tabstop duy nhất, cmd.exe hoạt động như mong đợi.
sjas

2
áp đảo
Vũ khí X

phụ thuộc vào tần suất bạn sử dụng một cái gì đó
sjas

16

Chỉ sử dụng git varvà lọc những thứ bắt đầu bằng alias:

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

14

Như các câu trả lời khác đã đề cập, git config -lliệt kê tất cả các chi tiết cấu hình từ tệp cấu hình của bạn. Đây là một ví dụ một phần của đầu ra đó cho cấu hình của tôi:

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

Vì vậy, chúng ta có thể grep ra các dòng bí danh, sử dụng 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

Chúng ta có thể làm cho điều này đẹp hơn bằng cách chỉ cutra alias.một phần của mỗi dòng, để lại cho chúng ta lệnh này:

git config -l | grep alias | cut -c 7-

Bản in nào:

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

Cuối cùng, đừng quên thêm nó dưới dạng bí danh:

git config --global alias.la "!git config -l | grep alias | cut -c 7-"

Thưởng thức!



12

Tôi đã đề cập vào tháng 6 năm 2018 với " danh sách tổng quan - các lệnh git được sử dụng nhiều nhất " sử dụng Git 2.18 " --list-cmds=alias( cam kết 3301d36 )", mà carej báo cáo trong câu trả lời của mình .

 git --list-cmds=alias

Ngoài ra git config --get-regexp alias, bạn có thể kết hợp đầu ra của nó với đầu ra của nó git helpsẽ thay đổi với Git 2.14.x / 2.15:

"git help co " bây giờ nói " co is aliased to ...", không phải " git co is".

Xem cam kết b3a8076 (ngày 12 tháng 9 năm 2017) của Kaartic Sivaraam ( sivaraam) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 5079cc8 , ngày 25 tháng 9 năm 2017)

help: thay đổi tin nhắn để chính xác hơn

Khi người dùng cố gắng sử dụng --helptùy chọn '' trên thông tin lệnh bí danh về bí danh được in như dưới đây:

$ git co --help
`git co' is aliased to `checkout'

Điều này có vẻ không đúng vì người dùng chỉ có bí danh ' co' chứ không phải ' git co'.
Điều này thậm chí có thể không chính xác trong trường hợp người dùng đã sử dụng bí danh như ' tgit'.

$ tgit co --help
`git co' is aliased to `checkout'

9

Tìm kiếm hoặc hiển thị tất cả các bí danh

Thêm vào .gitconfigdưới của bạn [alias]:

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

Sau đó bạn có thể làm

  • git aliases - hiển thị TẤT CẢ bí danh
  • git aliases commit - chỉ các bí danh có chứa "cam kết"

9

Tôi sử dụng bí danh này trong toàn cầu của tôi~/.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

để sản xuất đầu ra sau

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

( Lưu ý: Điều này hoạt động với tôi trong git bash trên Windows . Đối với các thiết bị đầu cuối khác, bạn có thể cần phải điều chỉnh việc thoát. )


Giải trình

  1. !git config --get-regexp ^alias\\. in tất cả các dòng từ git config bắt đầu bằng alias.
  2. sed -e s/^alias.//xóa alias.khỏi dòng
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /thay thế sự xuất hiện đầu tiên của một không gian bằng \\ $(printf \"\\043\")--\\>(ước tính #-->).
  4. column -t -s $(printf \"\\043\")định dạng tất cả các dòng thành một bảng cột cách đều nhau. Ký tự $(printf \"\\043\")đánh giá #được sử dụng làm dấu phân cách.
  5. sort -k 1 sắp xếp tất cả các dòng dựa trên giá trị trong cột đầu tiên

$ (printf \ "\ 043 \")

Điều này chỉ in ký tự #(hex 043) được sử dụng để tách cột. Tôi sử dụng bản hack nhỏ này để bản thân aliases bí danh không chứa #ký tự. Nếu không, nó sẽ thay thế những #ký tự khi in. Lưu ý : Thay đổi ký tự này thành ký tự khác nếu bạn cần bí danh có ký #hiệu bằng chữ .


gây tử vong: bí danh đệ quy: bí danh
Urasquirrel

fatal: bad config line 15 trong tệp C: / Users / ____ /. gitconfig
Urasquirrel

@Urasquirrel: Bạn đang gặp vấn đề gì trên hệ điều hành? Điều này hoạt động với tôi trong git bash trên Windows và bash trên Mac OS X (Apple Git).
Thomas

Đó chắc chắn là cửa sổ, nhưng một năm trở lên tôi không chắc chắn 100%.
Urasquirrel

2

Có một chức năng tích hợp ... thử

$ __git_aliases

liệt kê tất cả các bí danh :)


3
Bạn có thể hiển thị một ví dụ dòng lệnh về cách sử dụng này, cùng với đầu ra mẫu không?
Acumenus

Được xây dựng để làm gì? Tôi không thể tìm thấy bất cứ điều gì thuộc loại này trong msysgit. Chính xác thì bạn đã tìm thấy cái này ở đâu?
ADTC

2
Không gọi điều này trực tiếp từ thiết bị đầu cuối hoặc như là một đối số để git tạo ra bất kỳ đầu ra của giá trị. Chính xác thì cái này được xây dựng trong cái gì?
đồng ý ascyphous

4
Làm việc cho tôi trong git bash. $ __git_aliases trả về một danh sách các bí danh, mặc dù nó không hiển thị những gì chúng được đặt bí danh.
jaypb

1
@ADTC dòng mã trong câu trả lời này là một ví dụ dòng lệnh. Các $ biểu thị linux nhắc terminal điển hình. Nhập phần còn lại của dòng này vào một thiết bị đầu cuối như vậy và nhấn ENTERvà đưa ra một danh sách các bí danh của bạn. Hoạt động trên cả Linux và Windows (git bash), vì nó được tích hợp sẵn để git. (Đây có lẽ là một chức năng mà git sử dụng nội bộ để giải quyết các bí danh khi chúng được sử dụng trên dòng lệnh.)
Superole

1

Nếu bạn biết tên của bí danh, bạn có thể sử dụng --helptùy chọn để mô tả nó. Ví dụ:

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

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

1

Kể từ git 2.18 bạn có thể sử dụng git --list-cmds=alias


Họ chỉ trả lại bí danh cmd, không phải là nội dung. Có một lựa chọn để có được điều đó?
Carles Alcolea

0

Một gitbí danh khác (được gọi alias) in ra bí danh git: thêm phần sau vào [alias]phần gitconfig của bạn :

[alias]
    # lists aliases matching a regular expression
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"

Ví dụ sử dụng, đưa ra tên bí danh đầy đủ (khớp chính xác tên bí danh: nghĩa là ^foobar$) và chỉ hiển thị giá trị:

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

Hoặc, đưa ra biểu thức chính, hiển thị tất cả các giá trị và bí danh phù hợp:

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

Hãy cẩn thận: trích dẫn biểu thức chính quy để ngăn chặn sự mở rộng hệ vỏ như một quả địa cầu, mặc dù về mặt kỹ thuật không cần thiết nếu / khi không có tệp nào khớp với mẫu. Ngoài ra: không thể sử dụng bất kỳ biểu thức chính nào, ngoại trừ ^(bắt đầu mẫu) và $(kết thúc mẫu); chúng được ngụ ý. Giả sử bạn không sử dụng git-aliastừgit-extras .

Ngoài ra, rõ ràng bí danh của bạn sẽ khác nhau; đây chỉ là một vài cái mà tôi đã cấu hình (Có lẽ bạn cũng sẽ thấy chúng hữu ích.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.