Wie alias ich Befehle in Git?


619

Ich sah einen Screencast, in den jemand gekommen war

git st
git ci

arbeiten. Wenn ich es tue, bekomme ich eine Fehlermeldung, ob ich etwas anderes gemeint habe.
Als Git-Neuling muss ich wissen, was Sie tun müssen, um dies zu erreichen?


1
Sie können es auch hier sehen git-scm.com/book/en/v2/Git-Basics-Git-Aliases
JayRizzo

Weitere Fragen zur erweiterten Verwendung von Git-Alias ​​finden Sie hier: stackoverflow.com/questions/46528736/…
NeilG

Antworten:


977

Grundsätzlich müssen Sie nur Zeilen hinzufügen ~/.gitconfig

[alias]
    st = status
    ci = commit -v

Oder Sie können den Befehl git config alias verwenden:

$ git config --global alias.st status 

Verwenden Sie unter Unix einfache Anführungszeichen, wenn der Alias ​​ein Leerzeichen enthält:

$ git config --global alias.ci 'commit -v'

Verwenden Sie unter Windows doppelte Anführungszeichen, wenn der Alias ​​ein Leerzeichen oder ein Befehlszeilenargument enthält:

c:\dev> git config --global alias.ci "commit -v"

Der Alias-Befehl akzeptiert sogar Funktionen als Parameter. Schauen Sie sich Aliase an .


86
Ich empfehle Ihnen dringend git config --global, die Aliase ~/.gitconfiganstelle .git/configIhres aktuellen Repositorys zu verwenden.
Cascabel

27
Ich ziehe Einstellungen stauf status -s(kurze Status)
hasen

20
Das ist wirklich großartig. Ich habe danach gesucht. Nur ein Kopf hoch, wenn Sie einen Befehl mit Leerzeichen haben, sollten Sie 'wiegit config --global alias.sr 'svn rebase'
Amir Raminfar

1
@HellishHeat Diese Aliase werden von git für git erstellt. Wenn Sie Aliase für ein anderes Befehlszeilensystem wünschen, müssen Sie nachschlagen, wie Sie dieses System ausführen. (Sie scheinen ein Unix-ähnliches System zu verwenden, und ich weiß zufällig, dass das Erstellen von Aliasen auf Unices recht einfach ist. Die Syntax ist jedoch anders. Versuchen Sie eine Google-Suche.)
Michael Dorst

17
Nur ein weiterer Hinweis: Wenn Sie Git in der Windows-Befehlszeile verwenden, müssen Sie doppelte Anführungszeichen "anstelle von einfachen Anführungszeichen verwenden, wenn Sie Befehle mit Leerzeichen hinzufügen, z. B.git config --global alias.ci "commit -v"
ABVincita

179

Wie andere bereits gesagt haben, können Sie Git-Aliase in Ihrer globalen .gitconfigDatei entweder durch Bearbeiten ~/.gitconfigoder mithilfe des git config --global alias.<alias> <git-command>Befehls hinzufügen

Unten finden Sie eine Kopie des Alias-Abschnitts meiner ~/.gitconfigDatei:

[alias]
    st = status
    ci = commit
    co = checkout
    br = branch
    unstage = reset HEAD --
    last = log -1 HEAD

Wenn Sie bash verwenden, würde ich empfehlen, die Bash-Vervollständigung einzurichten, indem Sie sie git-completion.bashin Ihr Home-Verzeichnis kopieren und von Ihrem beziehen ~/.bashrc. (Ich glaube, ich habe dies aus dem Pro Git- Online-Buch erfahren .) Unter Mac OS X habe ich dies mit den folgenden Befehlen erreicht:

# Copy git-completion.bash to home directory
cp usr/local/git/contrib/completion/git-completion.bash ~/

# Add the following lines to ~/.bashrc
if [ -x /usr/local/git/bin/git ]; then
    source ~/.git-completion.bash
fi

Hinweis: Die Bash-Vervollständigung funktioniert nicht nur für die Standard-Git-Befehle, sondern auch für Ihre Git-Aliase.

Um die Tastenanschläge wirklich zu reduzieren, habe ich meiner ~/.bash_aliasesDatei Folgendes hinzugefügt, das aus folgenden Quellen stammt ~/.bashrc:

alias gst='git status'
alias gl='git pull'
alias gp='git push'
alias gd='git diff | mate'
alias gau='git add --update'
alias gc='git commit -v'
alias gca='git commit -v -a'
alias gb='git branch'
alias gba='git branch -a'
alias gco='git checkout'
alias gcob='git checkout -b'
alias gcot='git checkout -t'
alias gcotb='git checkout --track -b'
alias glog='git log'
alias glogp='git log --pretty=format:"%h %s" --graph'

2
Für Linux habe ich dies getan, um das git- complete.bash
Duncan Lock

10
Wenn Sie zsh verwenden, enthält die ausgezeichnete oh-my-zsh-Suite ein Plugin mit all diesen "Standard" -Git-Aliasnamen - github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/… - für bash , werfen Sie einen Blick auf github.com/revans/bash-it
jobwat

noob frage: was bedeutet es, aus einer ~/.bashrcdatei "bezogen zu werden" ?
Ahnbizcad

1
~/.bashrc: um die Tastenanschläge wirklich zu reduzieren. Genau das, wonach gesucht wurde.
Parasrish

Diese Antwort ist ein perfektes Beispiel dafür, warum ich die Verwendung einer .gitconfig in meiner Antwort vorschlage! stackoverflow.com/a/59896430/117471
Bruno Bronosky

65

Ich denke, die nützlichste gitconfig ist wie folgt: Wir verwenden immer die 20% -Funktion in git. Sie können das "g ll" ausprobieren. Es ist erstaunlich, die Details:

[user]
    name = my name
    email = me@example.com
[core]  
    editor = vi 
[alias]
    aa = add --all
    bv = branch -vv
    ba = branch -ra
    bd = branch -d
    ca = commit --amend
    cb = checkout -b
    cm = commit -a --amend -C HEAD
    ci = commit -a -v
    co = checkout
    di = diff
    ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
    ld = log --pretty=format:"%C(yellow)%h\\ %C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short --graph
    ls = log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative
    mm = merge --no-ff
    st = status --short --branch
    tg = tag -a 
    pu = push --tags
    un = reset --hard HEAD  
    uh = reset --hard HEAD^
   [color]  
    diff = auto  
    status = auto  
    branch = auto 
   [branch]  
    autosetuprebase = always

Wie stellst du das ein? Was setzen Sie wo, um dies so zu machen?
Ahnbizcad

3
@ahnbizcad Platzieren Sie in ~ / .gitconfig, wenn Sie config --global git, sonst geht es in .git / config des aktuellen Repository
shmup

19

Du brauchst den git config aliasBefehl. Führen Sie Folgendes in einem Git-Repository aus:

git config alias.ci commit

Für globalen Alias:

git config --global alias.ci commit

11

Das hat bei mir funktioniert:

bco = "!f(){ git branch ${1} && git checkout ${1}; };f"

auf:

$ git --version

git version 1.7.7.5 (Apple Git-26)

1
Sie können auch Folgendes tun: git config --global alias.bco 'checkout -b'. Dann könnten Sie tun: git bco new-branch. :)
Russell

4
Ich mag git cob. erinnert mich an den Sommer, wie bei Maiskolben. Eigentlich ein tolles Wort, über das wir nicht genug nachdenken ... Cob das ist
Мати Тернер

4
Falls dies das erste Mal ist, dass jemand anders als ich einen Git-Alias-Befehl gesehen hat, der mit beginnt !, beachten Sie, dass Since version 1.5.0, Git supports aliases executing non-git commands, by prefixing the value with "!"( ref )
Sam

9

Dadurch wird ein Alias ​​erstellt stfür status:

git config --add alias.st status


Ich brauchte das --add und um doppelte Anführungszeichen zu verwenden, nicht einfache Anführungszeichen
Ausgerichtet

Warum, git stwenn Sie verwenden können git s, entfernen Sie das s: P
Abdullah

7

Im Folgenden finden Sie die 4-Git-Verknüpfungen oder Aliase, mit denen Sie Zeit sparen können.

Öffnen Sie die Befehlszeile, geben Sie die folgenden 4 Befehle ein und verwenden Sie die Verknüpfungen danach.

git config --global alias.co checkout  
git config --global alias.ci commit    
git config --global alias.st status    
git config --global alias.br branch  

Jetzt teste sie!

$ git co              # use git co instead of git checkout
$ git ci              # use git ci instead of git commit
$ git st              # use git st instead of git status
$ git br              # use git br instead of git branch

6

Für diejenigen, die Shell-Befehle in einem Git-Alias ​​ausführen möchten , zum Beispiel:

$ git pof

In meinem Terminal schieben zwingen den aktuellen Zweig zu meinem Ursprung Repo:

[alias]
    pof = !git push origin -f $(git branch | grep \\* | cut -d ' ' -f2)

Bei dem die

$(git branch | grep \\* | cut -d ' ' -f2)

Befehl gibt den aktuellen Zweig zurück.

Dies ist also eine Verknüpfung zum manuellen Eingeben des Filialnamens:

git push origin -f <current-branch>

1
Warum nicht "einfach" git push -f origin HEADden aktuellen Zweig zu seinem entfernten Gegenstück verschieben? Auch eine Abkürzung, um mit Gewalt zu schieben? Wenn Sie häufig genug Druck ausüben müssen, um von einer Verknüpfung zu profitieren, stimmt etwas an anderer Stelle in Ihrem Setup oder Workflow nicht?
RomainValeri

Bash hat den Alias ​​erstellt (durch !gitden letzten git-Befehl ersetzt), aber das manuelle Bearbeiten der Konfigurationsdatei hat den Trick getan.
H. de Jonge

5

Sie können sowohl git- als auch non-git-Befehle aliasen. Es sieht so aus, als ob dies in Version 1.5 hinzugefügt wurde. Ein Ausschnitt aus der git config --helpSeite zu Version 2.5.4 auf meinem Mac zeigt:

Wenn der Alias-Erweiterung ein Ausrufezeichen vorangestellt ist, wird sie als Shell-Befehl behandelt.

In Ihrer globalen .gitconfigDatei könnten Sie beispielsweise Folgendes haben:

[alias]
    st = status
    hi = !echo 'hello'

Und dann führen Sie sie aus:

$ git hi
hello
$ git st
On branch master

...

5

Fügen Sie die folgenden Zeilen zu Ihrer ~ / .gitconfig in Ihrem Home-Verzeichnis hinzu

[alias]
# one-line log
l = log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short
ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
ld = log --pretty=format:"%C(yellow)%h\\ %C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short --graph
ls = log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative

a = add
ap = add -p
c = commit --verbose
ca = commit -a --verbose
cm = commit -m
cam = commit -a -m
m = commit --amend --verbose

d = diff
ds = diff --stat
dc = diff --cached

s = status -s
co = checkout
cob = checkout -b
# list branches sorted by last modified
b = "!git for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's-refs/heads/--'"

# list aliases
la = "!git config -l | grep alias | cut -c 7-"

Sobald dies erledigt ist, können Sie dies git aanstelle von git addbeispielsweise tun . Gleiches gilt für andere Befehle unter der Alias-Überschrift.


4
$ git Update
git: 'update' ist kein git-Befehl. Siehe 'git --help'.

Meinten Sie das?
    Update-Ref

$ git config --global alias.update 'pull -v'

$ git Update
Von git: //git.kernel.org/pub/scm/git/git
 = [aktuell] html -> origin / html
 = [aktuell] Wartung -> Herkunft / Wartung
 = [aktuell] Mann -> Herkunft / Mann
 = [aktuell] master -> origin / master
 = [aktuell] next -> origin / next
 = [aktuell] pu -> origin / pu
 = [aktuell] todo -> origin / todo
Schon aktuell.

4

Ich habe den Alias dogzum Anzeigen des Protokolldiagramms erstellt:

git config --global alias.dog "log --all --decorate --oneline --graph"

Und verwenden Sie es wie folgt:

git dog

3

Sie können Befehle auch verketten, wenn Sie das '!' Operator, um eine Shell zu erzeugen:

aa = !git add -A && git status

Dadurch werden alle Dateien hinzugefügt und Sie erhalten einen Statusbericht mit $ git aa.

Fügen Sie diesen Alias ​​hinzu, um Ihre Aliase auf praktische Weise zu überprüfen:

alias = config --get-regexp ^alias\\.

Dann $ git aliasgibt Ihnen ein kurzer Überblick über Ihre aktuellen Aliase und deren Funktionsweise.


3

Sie können benutzerdefinierte Git-Aliase mit der Konfiguration von git festlegen. Hier ist die Syntax:

git config --global alias.<aliasName> "<git command>"

Wenn Sie beispielsweise einen Alias ​​zum Anzeigen einer Liste von Dateien mit Zusammenführungskonflikten benötigen, führen Sie Folgendes aus:

git config --global alias.conflicts "diff --name-only --diff-filter=U"

Jetzt können Sie den obigen Befehl nur mit "Konflikten" verwenden:

git conflicts
# same as running: git diff --name-only --diff-filter=U

3

Bei mir ( ich verwende einen Mac mit Terminal ) funktionierte es nur, wenn ich .bash_profile hinzugefügt und eine weitere Registerkarte geöffnet habe, um die Änderung zu laden:

alias gst="git status"
alias gd="git diff"
alias gl="git log"
alias gco="git commit"
alias gck="git checkout"
alias gl="git pull"
alias gpom="git pull origin master"
alias gp="git push"
alias gb="git branch"

2

Um die Aliase noch kürzer als die in anderen Antworten erwähnte Standard-Git-Konfigurationsmethode zu machen, habe ich ein npm-Paket mingit ( npm install -g mingit) erstellt, sodass die meisten Befehle aus 2 Zeichen anstelle von 2 Wörtern bestehen. Hier sind die Beispiele:

g a .                   // git add .
g b other-branch        // git branch other-branch
g c "made some changes" // git commit -m "made some changes"
g co master             // git checkout master
g d                     // git diff
g f                     // git fetch
g i                     // git init 
g m hotfix              // git merge hotfix
g pll                   // git pull
g psh                   // git push
g s                     // git status

und andere Befehle wären ähnlich kurz. Dies hält auch Bash-Abschlüsse. Das Paket fügt Ihren Punktedateien eine Bash-Funktion hinzu und funktioniert unter OSX, Linux und Windows. Im Gegensatz zu den anderen Aliasen werden auch Aliase git-> gsowie der zweite Parameter verwendet.


1
Vielen Dank, dass Sie das Github-Projekt erstellt haben.
Biniam

2

Wenn Sie eine Alternative zu dieser ~/.gitconfigOption suchen und sich ein wenig mehr damit beschäftigen möchten , können Sie auch vollständig benutzerdefinierte Git-Befehle schreiben, indem Sie sie in ein globales Knotenpaket einschließen.

In Ihrer package.json definieren Sie den Root-Befehl (Beispiel :) gtund filtern dann die spezifischen Befehle, um die richtigen Git-Befehle auszuführen. Zum Beispiel git checkout my-branchkönnte sein gt co mybranch.

Das "christian-git" -Paket auf npm verwendet diese Methode: https://github.com/alexmacarthur/christian-git


1

Es wird hier Aliase gegeben. Auch hier gibt es gute Antworten, ich habe dies hinzugefügt, weil es sich in Windows und Linux unterscheidet



1

Fügen Sie mehrere Aliasdateien in Ihre Datei ein .gitconfig

Ich schlage vor, ein .gitconfig Include für Ihre Aliase zu verwenden. Sobald Sie anfangen, Aliase zu erstellen, werden Sie wahrscheinlich viele davon haben. Sie werden wahrscheinlich etwas sein, das Sie mit anderen teilen möchten. Wenn Sie sie in eine dedizierte Datei einfügen, können Sie sie problemlos freigeben. Ihr Team kann sogar ein Git-Repo verwenden, um gemeinsam genutzte Aliase zu speichern. Und natürlich einige Aliase, die Sie nicht freigeben möchten. Bewahren Sie sie daher in einer privaten Aliasdatei auf.

[include]
    path=src/dotfiles/.gitaliases

[include]
    path=src/team-utils/gitaliases

[include]
    path=.gitaliases.private

-1

Eine andere Möglichkeit für Windows wäre, ein Verzeichnis mit .bat-Dateien zu füllen, in denen sich Ihre Verknüpfungen befinden. Der Name der Datei ist die zu verwendende Verknüpfung. Fügen Sie einfach das Verzeichnis zu Ihrer Umgebungsvariablen PATH hinzu, und Sie haben alle Verknüpfungen im cmd-Fenster zur Verfügung.

Zum Beispiel (gc.bat):

git commit -m %1

Anschließend können Sie den folgenden Befehl in der Konsole ausführen:

gc "changed stuff"

Der Grund, warum ich dies als Antwort hinzufüge, ist, dass Sie bei der Verwendung nicht git ...nur Befehle verwenden.


1
Sie können dasselbe tun, indem Sie Ihrem .profile, .bashrc oder .bash_profile je nach System Shell-Aliase hinzufügen. Dann befinden sich alle Ihre Aliase in einer einzigen Datei. Dies ist auch der Standardmechanismus, um Ihre Aufgabe zu erfüllen. Der Abschnitt "Befehls-Aliase" zeigt einige häufig definierte Shell-Aliase, die für Git-Befehle verwendet werden. Es gibt bessere Ressourcen und Tutorials dazu. Dies ist zufällig ein Link, den ich geöffnet hatte.
SherylHohman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.