Git takma adlarını listele


444

Git takma adlarımın bir listesini nasıl basabilirim, yani bash aliaskomutuna benzer bir şey ?


2
Ayrıca bakınız: git-alias, git-extras
driftcatcher

7
@MattDiPasquale - Bence aşağıdaki en iyi cevap işe yarıyor, belki kabul etmelisin?
domoarigato

@domoarigato Teşekkür ederim. Bir cevap kabul etmediğim için üzgünüm. Sadece yaptım.
1919

Bu, en uzun süre kabul edilmiş bir cevap olmadan giden yararlı soru için bir aday olabilir :): P
domoarigato

@domoarigato Hah. Teşekkürler. :-)
ma11hew28

Yanıtlar:


124

Bu cevap üzerine inşa cevap tarafından johnny . Eğer kullanmıyorsanız eğer uygular git-aliasdan git-extras.

Linux'ta bir kez çalıştırın:

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

Bu, dosyanızda aliasdepolanan adlandırılmış bir kalıcı takma ad oluşturur ~/.gitconfig. Bunu kullandığınızda tüm git takma adlarınız ~/.gitconfigdosyadakiyle hemen hemen aynı formatta listelenir . Kullanmak için şunu yazın:

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

Aşağıdaki hususlar geçerlidir:

  • Takma adın aliasyukarıdaki gibi listelenmesini önlemek için | grep -v ^'alias 'kapanış çift tırnak işaretinden hemen önce ekleyin . Kullanıcıların komutun aliasbir takma ad olduğunu ve git özelliğinin olmadığını unutmalarını önermiyorum .

  • Listelenen diğer adları sıralamak için | sortkapanış çift tırnak işaretinin hemen öncesine ekleyin . Alternatif olarak, diğer adları ~/.gitconfigsıralı tutabilirsiniz .

  • Diğer adı sistem çapında bir diğer ad olarak eklemek için --global(geçerli kullanıcı için) yerine --system(tüm kullanıcılar için) yazın. Bu genellikle /etc/gitconfigdosyaya girer .


3
Bunu sevdim çünkü alias.her satırın başında kurtulur
Brian J

3
Neden olduğundan emin değilim, ama bu cevap benim için işe yaramıyor. Ben almaya devam ediyorum fatal: bad config. Git-extra'nın çözümü benim için işe yarıyor
Ashitaka

1
@Ashitaka, sınırlı bir sürümü deneyin, örn git config --global alias.alias "! git config --get-regexp ^alias\.". Alternatif olarak, git versiongit'in güncel bir sürümüne sahip olduğunuzdan emin olun.
Acumenus

Bu gerçekten harika bir iş ve hepsini son derece kullanışlı bir şekilde bir araya getiriyor!
UpAndAdam

Temelde birbirinizi çözen "! Git" kısmından kurtulabileceğinizi düşünüyorum. Git Aliases
Daniel Stevens

489
$ git config --get-regexp diğer adı

39
Bilgiçlikçi olmak için'^alias\.'
Josh Lee

27
Ya da sadece git config -eve sonra [alias]bölümü bulmak için gözlerinizi kullanın . Ancak git hayranları, problemlerini çözmek için gerekli olmadığında bile, her zaman biraz komut dosyası veya düzenli ifade eşleşmesi gibi görünüyorlar :)
MatrixFrog

39
git config -e.git/configyalnızca dosyayı düzenler . Ancak takma adların çoğu küresel olarak tanımlanır ~/.gitconfig.
Boldewyn

21
Pratik olmak için, bu olmalı git config --global alias.aliases config --get-regexp '^alias\.'"... ve sonragit aliases
Derek Greer

6
@DerekGreer bir "yerde eksiksiniz
Jake Berger

147

aliasTam olarak bu amaç için (garip bir şekilde) adlı bir git takma adı oluşturdum ... eğer yeterince takma ad kullanıyorsanız , zaman zaman kullanışlı ...

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

Not normal ifade emin çizgi ile başlar yapar alias..


Bu cevabı biraz temel alan bir cevap ekledim .
Acumenus

1
Bunun --systemyerine, --globalböyle bir şeyin kullanıcı düzeyinde değil, sistem düzeyinde daha yararlı olmasını öneriyorum .
ADTC

1
Bunu sev. You da You da best
Charles Watson

2
Eğer gitconfig doğrudan eklemek istiyorsanız Ve böyle bakmalıyız: alias = config --get-regexp ^alias\\..
marczych

Ne dersingit config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Keith Robertson

84

Başka bir alternatif (sadece hatırlaması kolay bulduğum bir şey):

git config --list | grep alias


8
Kolay hatırlanabilirlikten bahsetmişken , aliastakma adı bir kez oluşturabilir ve hatta yarattığınızı bile unutabilirsiniz.
Acumenus

3
İçin -luygun bir kısayol olarak kullanabilirsiniz , --listancak takma adları listelemek için bir takma ad oluşturma fikrini seviyorum.
ADTC

1
İyi bir çözüm, ancak bazı yapılandırmaların bir şekilde anahtar kelime takma adı içermesi durumunda takma adla başlayan satırlar elde etmek için bir regex ile grep kullanmak daha iyi:git config --list | grep -E '^alias'
MasterMind

28

Aşağıdaki Linux, MacOSX ve Windows (msysgit ile) altında çalışır.

Git la kullanın.Gitconfig içinde takma adları göstermek için

'Bash senaryosu' duydum mu? ;)

Yukarıdaki bir yorumdaki 'gerekli değil' kısmı hakkında, temel olarak takma adlarım için genel bakış gibi bir man sayfası oluşturdum. Neden bütün yaygara? Bu tam bir abartı değil mi?

Okumaya devam etmek...

Benim gibi .gitconfig, böyle ayrılmış komutları ayarladım TAB=TAB:

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

ve sadece tanımlanan takma TAB=adların bir kısmını gliflemek için başka bir takma ad tanımladı. (Diğer tüm seçeneklerin tanımlarında '=' öncesi ve sonrasında sekme yoktur, yalnızca boşluklar vardır.)

Bir takma ada eklenmeyen yorumlar da TAB===== ada eklenmeyen yorumlar da ektedir, bu nedenle selamlandıktan sonra gösterilirler.

Daha iyi görüntüleme için ben grep çıktı daha az, bu gibi boru:

temel sürüm: (siyah / beyaz)

  #.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= ' Bölümü eşleşir TAB=.

Hangi takma adlara sahip olduğum hakkında daha iyi bir genel bakış elde etmek için ve bash konsolunu kullandığım için çıktıyı terminal renkleriyle renklendirdim:

  • tüm '=' kırmızı renkte basılmıştır
  • tüm '#' yeşil renkte basılmıştır

gelişmiş sürüm: (renkli)

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

Temelde yukarıdaki ile aynı, sadece sed , renk kodlarını çıktıya almak için kullanımı eklenir.

Daha az-R bayrağı gösterilen renkleri elde etmek için gerekir.

(Kısa bir süre önce, pencerelerinin altında kaydırma çubuğu bulunan uzun komutların mobil cihazlarda doğru bir şekilde gösterilmediğini öğrendim: Metin kesiliyor ve kaydırma çubuğu basitçe eksik. Buradaki son kod snippet'inde durum böyle olabilir, hareket halindeyken kod parçacıklarına bakarken dikkat edin.)


Neden bu kadar sihir olsun ki?

İhtiyaçlarıma göre uyarlanmış yarım mil uzunluğunda bir takma adım var.
Ayrıca bazıları zamanla değişir , bu nedenle elinizde güncel bir listeye sahip olmak için en iyi fikir .gitconfig'i ayrıştırmaktır.

.Gitconfig takma adımdan bir kısa kısa alıntı:

    #  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

Benim linux veya mac iş istasyonlarında .bashrc'lerde de başka takma adlar var:

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

Bu şekilde yazmaya gerek yok, gerek git help submoduleyok git h submodule, sadece gh submoduleyardım almak için gereken her şey. Sadece bazı karakterler, ama ne sıklıkla yazıyorsunuz?

Aşağıdakilerin tümünü kullanıyorum, elbette sadece kısayollarla ...

  • Ekle
  • işlemek
  • taahhüt - değişiklik
  • reset --hard HEAD
  • it
  • getirmek
  • rebase
  • ödeme
  • şube
  • show-branch (birçok varyasyonda)
  • shortlog
  • reflog
  • diff (varyasyonlarda)
  • log (birçok varyasyonda)
  • durum
  • göstermek
  • notlar
  • ...

Bu sadece kafamın tepesindeydi.

Git komutlarının birçoğu grafik ön uçların herhangi birinde düzgün bir şekilde uygulanmadığından, git'i bir gui olmadan kullanmak zorundayım. Ama onları her kullandığımda, çoğunlukla aynı şekilde oluyor.

Son paragrafta belirtilen 'uygulanmadı' kısmında:
Henüz bir GUI'de buna benzeyen bir şey bulamadım:
sba = show-branch --color=always -a --more=10 --no-name- tüm yerel ve uzak şubeleri ve bunların içindeki taahhütleri göster
ccm = "!git reset --soft HEAD~ && git commit"- son taahhüt mesajını değiştir

Daha basit bir bakış açısından:
Ne sıklıkla yazıyorsunuz git add .veya git commit -am "..."? ... hatta dinlenme saymazsak
gibi çalışmalara şeyler alma git aaveya git ca "..."pencerelerde,
ya bash takma adla gaa/ g aaveya gca "..."/ g ca "..."linux ve mac en üstünde ...

İhtiyaçlarım için git komutlarını bu şekilde uyarlamak akıllıca bir şey gibi görünüyordu ...
... ve daha kolay kullanım için sadece daha az kullanılan komutlar için kendime yardımcı oldum, bu yüzden her zaman man sayfalarına başvurmak zorunda değilim. Komutlar önceden tanımlanmıştır ve bunları aramak mümkün olduğunca kolaydır.

Sonuçta biz programcıyız? İşlerin onlara ihtiyaç duyduğumuz gibi çalışmasını sağlamak bizim işimiz.

İşte ek bir ekran görüntüsü, bu Windows'da çalışıyor:

cmd.exe ile çalışan komut dosyası

BONUS: Linux veya Mac kullanıyorsanız, renklendirilmiş man sayfaları size biraz yardımcı olabilir:

renkli adam sayfaları


1
Bunu Windows ile çalışmak için alamıyorum. Çıkışlar için boşla = "!grep '\t=' ~/.gitconfig | less"
chwi

1
@Wilhelmsen: Yukarıdaki listeden bir şeyler kopyalayıp yapıştırabildiniz mi? Gerçekten TABher şeyden önce bir tane var =mı? Boşluklarla çalışmaz. Pencerelerimde boşluklar vardı .gitconfig, bunları tek bir tabstop ile değiştirdikten sonra cmd.exe beklendiği gibi davranıyor.
sjas

2
mühendislik
Silah X

ne sıklıkta bir şey kullandığınıza bağlıdır
sjas

16

git varYalnızca şununla başlayanları kullanma ve filtreleme alias:

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

14

Belirtilen diğer yanıtlar gibi git config -l, yapılandırma dosyanızdaki tüm yapılandırma ayrıntılarınızı listeler. İşte benim yapılandırma için bu çıktı kısmi bir örnek:

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

Böylece, takma ad hatlarını kullanarak git config -l | grep aliasşunları yapabiliriz:

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

Biz sadece bu güzel yapabilir cutdışarı ting alias.bu komutla bize bırakarak her satırın bir parçası:

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

Hangi baskılar:

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

Son olarak, bunu takma ad olarak eklemeyi unutmayın:

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

Zevk almak!



12

Ben "ile Haziran 2018 bahsedilen - en çok kullanılan git komutları bakış listeye Git 2.18" kullanım " --list-cmds=alias( 3301d36 işlemek )", yani carej yer alan haberlere onun cevabını .

 git --list-cmds=alias

Buna veya ofisine ek olarak , çıkışını Git 2.14.x / 2.15 ile değişecek olan çıktı git config --get-regexp aliasile birleştirebilirsiniz git help:

" git help co" şimdi " co is aliased to ..." değil " git co is" diyor .

Bakınız Kaartic Sivaraam ( ) tarafından b3a8076 (12 Eyl 2017) taahhüdüsivaraam .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 5079cc8 tamamlama 2017 25 Eki)

help: daha kesin olmak için bir mesajı değiştirin

Kullanıcı --helptakma addaki komutta ' ' seçeneğini kullanmaya çalıştığında takma ad hakkındaki bilgiler aşağıda gösterildiği gibi yazdırılır:

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

Kullanıcı doğru şekilde ' co' değil ' git co' değil , bu doğru görünmüyor .
Bu, kullanıcının ' tgit' gibi bir takma ad kullandığı durumlarda bile yanlış olabilir .

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

9

Tüm takma adları arayın veya gösterin

Senin ekleyin .gitconfigunder [alias]:

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

Sonra yapabilirsin

  • git aliases - TÜM takma adları göster
  • git aliases commit - yalnızca "taahhüt" içeren takma adlar

9

Kullandığım bu takma benim küresel içinde~/.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

Aşağıdaki çıktıyı üretmek için

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

( Not: Bu benim için Windows'ta git bash'da çalışır . Diğer terminaller için kaçmayı uyarlamanız gerekebilir. )


açıklama

  1. !git config --get-regexp ^alias\\. git config ile başlayan tüm satırları yazdırır alias.
  2. sed -e s/^alias.//alias.hattan çıkarır
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /bir boşluğun ilk oluşumunu \\ $(printf \"\\043\")--\\>(olarak değerlendirilir #-->) ile değiştirir.
  4. column -t -s $(printf \"\\043\")tüm satırları eşit aralıklı sütun tablosuna biçimlendirir. Karakter $(printf \"\\043\")değerlendirir için #ayırıcı olarak kullanılır.
  5. sort -k 1 tüm satırları ilk sütundaki değere göre sıralar

$ (printf \ "\ 043 \")

Bu sadece #sütun ayırma için kullanılan karakteri (hex 043) yazdırır . Bu küçük kesmek kullanıyorum, bu yüzden aliases takma adın# karakteri tam anlamıyla içermiyor . Aksi takdirde #yazdırma sırasında bu karakterlerin yerini alır . Not : Değişmez #işaretli takma adlara ihtiyacınız varsa bunu başka bir karakterle değiştirin .


ölümcül: özyinelemeli takma ad: takma adlar
Urasquirrel

ölümcül: C dosyasındaki hatalı yapılandırma satırı 15: / Users / ____ /. gitconfig
Urasquirrel

@Urasquirrel: Hangi işletim sisteminde sorun yaşıyorsunuz? Bu benim için Windows'ta git bash'ta ve Mac OS X'te (Apple Git) bash'de çalışıyor.
Thomas

Kesinlikle pencereydi, ancak bir yıl veya daha fazla sonra% 100 emin değilim.
Urasquirrel

2

Yerleşik bir işlev var ... dene

$ __git_aliases

tüm diğer adları listeler :)


3
Örnek çıktıyla birlikte bunun nasıl kullanılacağına dair bir komut satırı örneği gösterebilir misiniz?
Acumenus

Ne için inşa edildi? Msysgit'de böyle bir şey bulamıyorum. Bunu tam olarak nerede buldun?
ADTC

2
Bunu doğrudan terminalden çağırmak veya git'e argüman olarak herhangi bir değer çıktısı üretmez. Bu tam olarak ne içindedir?
katılıyorum

4
Git bash benim için çalıştı. $ __git_aliases, takma adın ne olduğunu göstermese de bir takma ad listesi döndürür.
jaypb

1
@ADTC bu yanıtında kod satırı olan bir komut satırı örneği. $ Tipik Linux terminali istemi belirtmektedir. Bu satırın geri kalanını böyle bir terminale yazın ve vurun ENTERve takma adların bir listesi gelir. Hem Linux hem de Windows (git bash) üzerinde çalışır, çünkü git için yerleşiktir . (Muhtemelen git komut satırında kullanıldığında takma adları çözümlemek için dahili olarak kullanılan bir
işlevdir

1

Takma adın adını biliyorsanız, --helpaçıklamak için seçeneği kullanabilirsiniz . Örneğin:

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

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

1

Git 2.18'den itibaren kullanabilirsiniz git --list-cmds=alias


Sadece takma ad cmd'yi döndürürler, içeriği değil. Bunu elde etmek için bir seçenek var mı?
Carles Alcolea

0

Git takma adlarını yazdıran başka bir gittakma ad (denir alias): gitconfig [alias]bölümünüze aşağıdakileri ekleyin :

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

Tam takma ad veren örnek kullanım (takma ad adıyla tam olarak eşleşir: yani, ^foobar$) ve yalnızca değeri gösterir:

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

Veya, eşleşen tüm diğer adları ve değerleri gösteren regexp ifadesini verin:

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

Uyarılar: Kabuğun genişlemesini bir glob olarak önlemek için normal ifadeyi alıntılayın, ancak hiçbir dosya kalıba uymuyorsa / eşleşmiyorsa teknik olarak gerekli değildir. Ayrıca: ^(kalıp başlangıcı) ve $(kalıp sonu) kullanılamaz; ima edilirler. Kullanmadığınız varsayar git-aliasdangit-extras .

Ayrıca, açıkça sizin takma adlarınız farklı olacaktır; bunlar benim yapılandırdığım sadece birkaçı. (Belki de onları faydalı bulacaksınız.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.