Jak aliasować polecenia w git?

619

Widziałem screencast, w którym ktoś się dostał

git st
git ci

pracować. Gdy to robię, pojawia się błąd z pytaniem, czy mam na myśli coś innego.
Będąc głupkiem, muszę wiedzieć, co musisz zrobić, aby to zrobić?

DevelopisChris
źródło
1
Możesz go również zobaczyć tutaj git-scm.com/book/en/v2/Git-Basics-Git-Aliases
JayRizzo
Zobacz także dalsze pytania na temat bardziej zaawansowanego użycia aliasu git tutaj: stackoverflow.com/questions/46528736/…
NeilG

Odpowiedzi:

977

Zasadniczo wystarczy dodać linie ~/.gitconfig

[alias]
    st = status
    ci = commit -v

Lub możesz użyć polecenia alias git config:

$ git config --global alias.st status 

W unixie używaj pojedynczych cudzysłowów, jeśli alias ma spację:

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

W systemie Windows użyj podwójnych cudzysłowów, jeśli alias ma spację lub argument wiersza poleceń:

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

Komenda alias akceptuje nawet funkcje jako parametry. Spójrz na aliasy .

Diego Dias
źródło
86
Zdecydowanie zalecamy użycie git config --globalaliasów ~/.gitconfigzamiast w .git/configbieżącym repozytorium.
Cascabel
27
Wolę ustawień stdla status -s(krótkiej status)
hasen
20
To jest naprawdę niesamowite. Szukałem tego. Zaledwie heads-up, jeśli masz polecenia ze spacjami należy używać 'jakgit config --global alias.sr 'svn rebase'
Amir Raminfar
1
@HellishHeat Te aliasy są tworzone przez git dla git. Jeśli chcesz mieć aliasy dla innego systemu wiersza poleceń, musisz sprawdzić, jak to zrobić w tym systemie. (Wygląda na to, że używasz systemu uniksowego, a ja wiem, że tworzenie aliasów w Unices jest dość proste. Jednak składnia jest inna. Spróbuj wyszukać w Google.)
Michael Dorst,
17
Jeszcze jedna uwaga, jeśli używasz Git w wierszu poleceń systemu Windows, będziesz musiał użyć podwójnych cudzysłowów "zamiast pojedynczych cudzysłowów podczas dodawania polecenia ze spacjami, np.git config --global alias.ci "commit -v"
ABVincita
179

Jak inni powiedzieli, właściwy sposób dodawania aliasów git znajduje się w .gitconfigpliku globalnym poprzez edycję ~/.gitconfiglub użycie git config --global alias.<alias> <git-command>polecenia

Poniżej znajduje się kopia sekcji aliasów mojego ~/.gitconfigpliku:

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

Ponadto, jeśli używasz bash, zalecam skonfigurowanie zakończenia bash, kopiując git-completion.bashdo katalogu domowego i pozyskując go z twojego ~/.bashrc. (Wydaje mi się, że dowiedziałem się o tym z książki online Pro Git .) W systemie Mac OS X dokonałem tego za pomocą następujących poleceń:

# 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

Uwaga: Uzupełnianie bash będzie działać nie tylko dla standardowych poleceń git, ale także dla aliasów git.

Wreszcie, aby naprawdę ograniczyć liczbę naciśnięć klawiszy, do mojego ~/.bash_aliasespliku, który pochodzi z ~/.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'
Matthew Rankin
źródło
2
W przypadku Linuksa zrobiłem to, aby uzyskać git- complete.bash
Duncan Lock
10
Jeśli używasz zsh, doskonały pakiet oh-my-zsh zawiera wtyczkę ze wszystkimi tymi „standardowymi” aliasami git - github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/… - do bash , spójrz na github.com/revans/bash-it
jobwat
pytanie noob: co to znaczy „pochodzić z” ~/.bashrcpliku?
ahnbizcad
1
~/.bashrc: aby naprawdę ograniczyć klawisze. Dokładnie to, czego szukałem.
parasrish
Ta odpowiedź jest doskonałym przykładem tego, dlaczego sugeruję użycie .gitconfig w mojej odpowiedzi! stackoverflow.com/a/59896430/117471
Bruno Bronosky
65

Myślę, że najbardziej przydatny jest taki gitconfig, zawsze używamy funkcji 20% w git, możesz wypróbować "g ll", to niesamowite, szczegóły:

[user]
    name = my name
    email = [email protected]
[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
wcc526
źródło
jak to skonfigurować? co możesz zrobić, żeby to zrobić?
ahnbizcad
3
@ahnbizcad miejsce w ~ / .gitconfig jeśli git config --global inaczej to idzie w .git / config obecnego repozytorium
Shmup
19

Potrzebujesz git config aliaspolecenia. Wykonaj następujące czynności w repozytorium Git:

git config alias.ci commit

W przypadku globalnego aliasu:

git config --global alias.ci commit
Alan Haggai Alavi
źródło
11

To działało dla mnie:

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

na:

$ git --version

git version 1.7.7.5 (Apple Git-26)
Nicolas Gramlich
źródło
1
możesz także: git config --global alias.bco 'checkout -b'. Następnie możesz zrobić: git bco new-branch. :)
Russell,
4
Lubię git cob. przypomina mi lato, jak w kukurydzy na kolbie. właściwie świetne słowo, o którym nie myślimy wystarczająco dużo ... to znaczy
Мати Тернер
4
W przypadku, gdy po raz pierwszy ktoś inny niż ja widział polecenie aliasu git zaczynające się od !, zwróć uwagę, że Since version 1.5.0, Git supports aliases executing non-git commands, by prefixing the value with "!"( odnośnik )
Sam
9

Spowoduje to utworzenie aliasu stdla status:

git config --add alias.st status

Nick Moore
źródło
Potrzebowałem --add i żeby użyć podwójnych cudzysłowów, a nie pojedynczych cudzysłowów
Wyrównany
Dlaczego, git stkiedy możesz użyć git s, pozbądź się tego s: P
Abdullah
7

Poniżej znajdują się 4 skróty git lub aliasy, które pozwalają zaoszczędzić czas.

Otwórz wiersz poleceń i wpisz poniższe 4 polecenia, a następnie użyj skrótów po.

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

Teraz je przetestuj!

$ 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
Prabhakar Undurthi
źródło
6

Dla tych, którzy chcą wykonywać polecenia powłoki w aliasie git , na przykład:

$ git pof

W moim terminalu naciska siłę obecnego oddziału do mojego repozytorium pochodzenia:

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

Gdzie

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

polecenie zwraca bieżącą gałąź.

Oto skrót do ręcznego wpisywania nazwy oddziału:

git push origin -f <current-branch>
Gus
źródło
1
Dlaczego nie „po prostu” git push -f origin HEADzepchnąć bieżącą gałąź do swojego zdalnego odpowiednika? Również skrót, aby naciskać z siłą? Jeśli musisz naciskać siłę wystarczająco często, aby skorzystać ze skrótu, czy nie jest coś nie tak w innym miejscu w konfiguracji lub przepływie pracy?
RomainValeri
Bash utworzył alias (zastępując !gitostatnią komendą git), ale załatwiła go ręczna edycja pliku konfiguracyjnego.
H. de Jonge
5

Możesz aliasować zarówno polecenia git, jak i inne niż git. Wygląda na to, że został dodany w wersji 1.5. Fragment git config --helpstrony w wersji 2.5.4 na moim komputerze Mac pokazuje:

Jeśli rozszerzenie aliasu jest poprzedzone wykrzyknikiem, będzie traktowane jak polecenie powłoki.

Na przykład w .gitconfigpliku globalnym możesz mieć:

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

A następnie uruchom je:

$ git hi
hello
$ git st
On branch master

...
mkobit
źródło
5

Dodaj następujące wiersze do ~ / .gitconfig w katalogu domowym

[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-"

Gdy to zrobisz, możesz to zrobić na przykład git azamiast git add. To samo dotyczy innych poleceń pod nagłówkiem aliasu.

Stryker
źródło
4
$ git update
git: „aktualizacja” nie jest poleceniem git. Zobacz „git --help”.

Miałaś na myśli to?
    aktualizacja-ref

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

$ git update
Z git: //git.kernel.org/pub/scm/git/git
 = [aktualne] html -> origin / html
 = [aktualne] maint -> origin / maint
 = [aktualne] człowiek -> pochodzenie / człowiek
 = [aktualne] master -> origin / master
 = [aktualne] następne -> pochodzenie / następne
 = [aktualne] pu -> origin / pu
 = [aktualne] todo -> origin / todo
Już na bieżąco.
Greg Bacon
źródło
4

Utworzyłem alias dogdo wyświetlania wykresu dziennika:

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

I użyj go w następujący sposób:

git dog
Seyed Morteza Mousavi
źródło
3

Możesz także łączyć polecenia, jeśli używasz „!” operator, aby spawnować powłokę:

aa = !git add -A && git status

Spowoduje to dodanie wszystkich plików i wygenerowanie raportu o stanie z $ git aa.

Aby w wygodny sposób sprawdzić swoje aliasy, dodaj ten alias:

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

Następnie szybkie $ git aliasdaje ci aktualne aliasy i ich funkcje .

Joseph Cheek
źródło
3

Możesz ustawić niestandardowe aliasy git za pomocą config git. Oto składnia:

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

Na przykład jeśli potrzebujesz aliasu, aby wyświetlić listę plików, w których występują konflikty scalania, uruchom:

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

Teraz możesz używać powyższego polecenia tylko przy użyciu „konfliktów”:

git conflicts
# same as running: git diff --name-only --diff-filter=U
Akshay Bosamiya
źródło
3

Dla mnie ( używam Maca z terminalem ) działało tylko wtedy, gdy dodałem plik .bash_profile i otworzyłem kolejną kartę, aby załadować zmianę:

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"
przystań
źródło
2

Aby uzyskać aliasy jeszcze krótsze niż standardowy sposób konfiguracji git wspomniany w innych odpowiedziach, stworzyłem pakiet npm mingit ( npm install -g mingit), aby większość poleceń miała 2 znaki zamiast 2 słów. Oto przykłady:

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

a inne polecenia byłyby podobnie krótkie. To także zachowuje ukończenie bash. Pakiet dodaje funkcję bash do twoich plików dot, działa na systemach OSX, Linux i Windows. Ponadto, w przeciwieństwie do innych aliasów, aliasy git-> goraz drugi parametr.

ironiczność
źródło
1
Dziękujemy za utworzenie projektu github.
biniam
2

Jeśli chcesz alternatywę dla tej ~/.gitconfigopcji i nieco bardziej zagłębiasz się, kolejną opcją jest napisanie całkowicie niestandardowych poleceń git poprzez zawinięcie ich w globalny pakiet węzłów.

W pliku package.json zdefiniujesz polecenie root (przykład:), gta następnie przefiltrujesz określone polecenia, aby wykonać prawidłowe polecenia git. Na przykład git checkout my-branchmoże być gt co mybranch.

Pakiet „christian-git” na npm używa tej metody: https://github.com/alexmacarthur/christian-git

Alex MacArthur
źródło
1

Podano tutaj Aliasy. Nawet tutaj są świetne odpowiedzi, dodałem to, ponieważ różni się pod Windows i Linux

madhu131313
źródło
1

Dołącz wiele plików aliasów do swojego .gitconfig

Sugeruję użycie .gitconfig dołączania do swoich aliasów. Gdy zaczniesz tworzyć aliasy, prawdopodobnie skończy się ich wiele. Prawdopodobnie będą to coś, czym chcesz się podzielić z innymi. Umieszczenie ich w dedykowanym pliku ułatwia udostępnianie. Twój zespół może nawet użyć repozytorium git do przechowywania udostępnionych aliasów. I oczywiście niektórych aliasów, których nie chcesz udostępniać, więc przechowuj je w prywatnym pliku aliasów.

[include]
    path=src/dotfiles/.gitaliases

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

[include]
    path=.gitaliases.private
Bruno Bronosky
źródło
-1

Inną możliwością dla systemu Windows byłoby posiadanie katalogu wypełnionego plikami .bat, w których znajdują się skróty. Nazwa pliku to skrót, którego należy użyć. Po prostu dodaj katalog do zmiennej środowiskowej PATH, a będziesz mieć do dyspozycji wszystkie skróty w oknie cmd.

Na przykład (gc.bat):

git commit -m %1

Następnie możesz wykonać następujące polecenie w konsoli:

gc "changed stuff"

Powodem, dla którego dodaję to jako odpowiedź, jest to, że podczas korzystania z tego nie jesteś ograniczony git ...tylko do poleceń.

Rick van Osta
źródło
1
Możesz zrobić to samo, dodając aliasy powłoki do pliku .profile, .bashrc lub .bash_profile, w zależności od systemu. Następnie wszystkie aliasy znajdują się w jednym pliku. Jest to również standardowy mechanizm umożliwiający wykonanie zadania. Sekcja „Aliasy poleceń” pokazuje niektóre powszechnie definiowane aliasy powłoki używane dla poleceń git. Są na to lepsze zasoby i samouczki, tak się składa, że ​​otworzyłem link.
SherylHohman