Comment alias les commandes dans git?

619

J'ai vu un screencast où quelqu'un avait obtenu

git st
git ci

travailler. Quand je le fais, je reçois une erreur me demandant si je voulais dire autre chose.
Étant un git newb, j'ai besoin de savoir ce que vous devez faire pour y arriver?

DevelopingChris
la source
1
Vous pouvez également le voir ici git-scm.com/book/en/v2/Git-Basics-Git-Aliases
JayRizzo
Voir également d'autres questions sur l'utilisation plus avancée de l'alias git ici: stackoverflow.com/questions/46528736/…
NeilG

Réponses:

977

Fondamentalement, il vous suffit d'ajouter des lignes à ~/.gitconfig

[alias]
    st = status
    ci = commit -v

Ou vous pouvez utiliser la commande d'alias git config:

$ git config --global alias.st status 

Sous Unix, utilisez des guillemets simples si l'alias a un espace:

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

Sous Windows, utilisez des guillemets doubles si l'alias a un espace ou un argument de ligne de commande:

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

La commande alias accepte même des fonctions comme paramètres. Jetez un œil aux alias .

Diego Dias
la source
86
Je vous recommande vivement d'utiliser git config --globalpour placer les alias au ~/.gitconfiglieu de .git/configpour votre référentiel actuel.
Cascabel
27
Je préfère les paramètres stà status -s(statut court)
hasen
20
C'est vraiment génial. Je cherchais ceci. Juste un avertissement, si vous avez une commande avec des espaces que vous devriez utiliser 'commegit config --global alias.sr 'svn rebase'
Amir Raminfar
1
@HellishHeat Ces alias sont créés par git, pour git. Si vous voulez des alias pour un autre système de ligne de commande, vous devrez chercher comment faire celui-là sur ce système. (Vous semblez utiliser un système de type Unix, et je sais que la création d'alias sur Unices est assez simple. La syntaxe est cependant différente. Essayez une recherche Google.)
Michael Dorst
17
Juste un autre avertissement, si vous utilisez Git sur la ligne de commande Windows, vous devrez utiliser des guillemets doubles "au lieu de guillemets simples lors de l'ajout d'une commande avec des espaces, par exemplegit config --global alias.ci "commit -v"
ABVincita
179

Comme d'autres l'ont dit, la manière appropriée d'ajouter des alias git est dans votre .gitconfigfichier global soit en modifiant ~/.gitconfigsoit en utilisant la git config --global alias.<alias> <git-command>commande

Voici une copie de la section alias de mon ~/.gitconfigfichier:

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

De plus, si vous utilisez bash, je recommanderais de configurer l'achèvement de bash en copiant git-completion.bashdans votre répertoire personnel et en le recherchant à partir de votre ~/.bashrc. (Je crois avoir appris cela à partir du livre en ligne Pro Git .) Sur Mac OS X, j'ai accompli cela avec les commandes suivantes:

# 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

Remarque: La complétion bash fonctionnera non seulement pour les commandes git standard mais aussi pour vos alias git.

Enfin, pour vraiment réduire les frappes, j'ai ajouté ce qui suit à mon ~/.bash_aliasesfichier, qui provient de ~/.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
la source
2
Pour Linux, j'ai fait cela pour obtenir les trucs git-complétement.bash: blogs.oracle.com/linuxnstuff/entry/…
Duncan Lock
10
Si vous utilisez zsh, l'excellente suite oh-my-zsh contient un plugin avec tous ces alias git "standard" - github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/… - pour bash , jetez un œil à github.com/revans/bash-it
jobwat
noob question: qu'est-ce que cela signifie d'être "sourced from" ~/.bashrcfile?
ahnbizcad
1
~/.bashrc: pour vraiment réduire les frappes. Exactement ce que je cherchais.
parasr
Cette réponse est un parfait exemple de la raison pour laquelle je suggère d'utiliser un .gitconfig inclure dans ma réponse! stackoverflow.com/a/59896430/117471
Bruno Bronosky
65

Je pense que le gitconfig le plus utile est comme ça, nous utilisons toujours la fonction 20% dans git, vous pouvez essayer le "g ll", c'est incroyable, les détails:

[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
la source
comment procédez-vous? que mettez-vous pour que cela soit ainsi?
ahnbizcad
3
@ahnbizcad Placez dans ~ / .gitconfig si vous git config --global sinon il va dans .git / config du dépôt actuel
shmup
19

Vous avez besoin de la git config aliascommande. Exécutez ce qui suit dans un référentiel Git:

git config alias.ci commit

Pour l'alias global:

git config --global alias.ci commit
Alan Haggai Alavi
la source
11

Cela a fonctionné pour moi:

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

sur:

$ git --version

git version 1.7.7.5 (Apple Git-26)
Nicolas Gramlich
la source
1
vous pouvez également faire: git config --global alias.bco 'checkout -b'. Ensuite, vous pouvez faire: git bco new-branch. :)
Russell
4
J'aime git cob. me rappelle l'été, comme dans le maïs en épi. en fait un grand mot auquel nous ne pensons pas assez ... cob c'est
Мати Тернер
4
Dans le cas où c'est la première fois que quelqu'un d'autre que moi voit une commande d'alias git commençant par !, notez que Since version 1.5.0, Git supports aliases executing non-git commands, by prefixing the value with "!"( ref )
Sam
9

Cela créera un alias stpour status:

git config --add alias.st status

Nick Moore
la source
J'avais besoin de --ajouter et d'utiliser des guillemets doubles, pas des guillemets simples
Aligné
Pourquoi git stquand vous pouvez utiliser git s, débarrassez-vous de cela s: P
Abdullah
7

Voici les 4 raccourcis ou alias que vous pouvez utiliser pour gagner du temps.

Ouvrez la ligne de commande et tapez ces quatre commandes ci-dessous et utilisez les raccourcis après.

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

Maintenant, testez-les!

$ 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
la source
6

Pour ceux qui cherchent à exécuter des commandes shell dans un alias git , par exemple:

$ git pof

Dans mon terminal poussera forcer la branche actuelle vers mon référentiel d'origine:

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

Où le

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

retourne la branche courante.

Voici donc un raccourci pour taper manuellement le nom de la branche:

git push origin -f <current-branch>
Gus
la source
1
Pourquoi ne pas "simplement" git push -f origin HEADpousser la branche actuelle vers son homologue distant? Aussi, un raccourci pour pousser avec force? Si vous devez pousser la force assez fréquemment pour bénéficier d'un raccourci, quelque chose ne va pas ailleurs dans votre configuration ou votre flux de travail?
RomainValeri
Bash a maillé la création de l'alias (en le remplaçant !gitpar la dernière commande git), mais l'édition manuelle du fichier de configuration a fait l'affaire.
H. de Jonge
5

Vous pouvez alias les commandes git et non-git. Il semble que cela ait été ajouté dans la version 1.5. Un extrait de la git config --helppage sur la version 2.5.4 sur mon Mac montre:

Si l'extension d'alias est préfixée d'un point d'exclamation, elle sera traitée comme une commande shell.

Par exemple, dans votre .gitconfigfichier global , vous pourriez avoir:

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

Et puis exécutez-les:

$ git hi
hello
$ git st
On branch master

...
mkobit
la source
5

Ajoutez les lignes suivantes à votre ~ / .gitconfig dans votre répertoire personnel

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

Une fois cela fait, vous pouvez le faire git aau lieu de git addpar exemple. La même chose s'applique aux autres commandes sous le titre d'alias.

Stryker
la source
4
$ git update
git: 'update' n'est pas une commande git. Voir 'git --help'.

Vouliez-vous dire cela?
    update-ref

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

$ git update
Depuis git: //git.kernel.org/pub/scm/git/git
 = [à jour] html -> origine / html
 = [à jour] maint -> origine / maint
 = [à jour] homme -> origine / homme
 = [à jour] master -> origine / master
 = [à jour] suivant -> origine / suivant
 = [à jour] pu -> origine / pu
 = [à jour] todo -> origine / todo
Déjà à jour.
Greg Bacon
la source
4

J'ai créé l'alias dogpour afficher le graphique du journal:

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

Et utilisez-le comme suit:

git dog
Seyed Morteza Mousavi
la source
3

Vous pouvez également enchaîner les commandes si vous utilisez le '!' opérateur pour générer un shell:

aa = !git add -A && git status

Cela ajoutera tous les fichiers et vous donnera un rapport d'état avec $ git aa.

Pour un moyen pratique de vérifier vos alias, ajoutez cet alias:

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

Ensuite, un rapide $ git aliasvous donne vos alias actuels et ce qu'ils font.

Joseph Cheek
la source
3

Vous pouvez définir des alias git personnalisés à l'aide de la configuration de git. Voici la syntaxe:

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

Par exemple, si vous avez besoin d'un alias pour afficher une liste de fichiers qui ont des conflits de fusion, exécutez:

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

Maintenant, vous ne pouvez utiliser la commande ci-dessus qu'en utilisant des "conflits":

git conflicts
# same as running: git diff --name-only --diff-filter=U
Akshay Bosamiya
la source
3

Pour moi ( j'utilise mac avec terminal ) ne fonctionnait que lorsque j'ajoutais sur .bash_profile et ouvrais un autre onglet pour charger la modification:

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"
Marina
la source
2

Juste pour obtenir des alias encore plus courts que la façon de configurer git standard mentionnée dans d'autres réponses, j'ai créé un paquet npm mingit ( npm install -g mingit) afin que la plupart des commandes deviennent 2 caractères au lieu de 2 mots. Voici les exemples:

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

et d'autres commandes seraient également courtes. Cela conserve également les achèvements bash. Le package ajoute une fonction bash à vos fichiers dot, fonctionne sur osx, linux et windows. De plus, contrairement aux autres alias, il alias git-> gainsi que le deuxième paramètre.

ironie
la source
1
Merci d'avoir créé le projet github.
biniam
2

Si vous voulez une alternative à l' ~/.gitconfigoption et ouvert à creuser un peu plus, une autre option consiste à écrire des commandes git entièrement personnalisées en les enveloppant dans un package de noeud global.

Dans votre package.json, vous définiriez la commande root (exemple:), gtpuis filtreriez les commandes spécifiques pour exécuter les commandes git correctes. Par exemple, git checkout my-branchpourrait l'être gt co mybranch.

Le package "christian-git" sur npm utilise cette méthode: https://github.com/alexmacarthur/christian-git

Alex MacArthur
la source
1

Il est donné ici Alias .Même il y a de grandes réponses ici, j'ai ajouté parce qu'il est différent dans Windows et Linux

madhu131313
la source
1

Incluez plusieurs fichiers d'alias dans votre .gitconfig

Je suggère d'utiliser un .gitconfig include pour vos alias. Une fois que vous aurez commencé à créer des alias, vous vous retrouverez probablement avec beaucoup d'entre eux. Ils seront probablement quelque chose que vous souhaitez partager avec les autres. Les mettre dans un fichier dédié facilite leur partage. Votre équipe peut même utiliser un référentiel git pour conserver les alias partagés. Et bien sûr, certains alias que vous ne voudrez pas partager, alors conservez-les dans un fichier d'alias privé.

[include]
    path=src/dotfiles/.gitaliases

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

[include]
    path=.gitaliases.private
Bruno Bronosky
la source
-1

Une autre possibilité pour Windows serait d'avoir un répertoire rempli de fichiers .bat contenant vos raccourcis. Le nom du fichier est le raccourci à utiliser. Ajoutez simplement le répertoire à votre variable d'environnement PATH et vous avez tous les raccourcis à votre disposition dans la fenêtre cmd.

Par exemple (gc.bat):

git commit -m %1

Ensuite, vous pouvez exécuter la commande suivante dans la console:

gc "changed stuff"

La raison pour laquelle j'ajoute ceci comme réponse est que lorsque vous utilisez cela, vous n'êtes pas limité aux git ...seules commandes.

Rick van Osta
la source
1
Vous pouvez faire de même en ajoutant des alias de shell à votre .profile, ou .bashrc, ou .bash_profile, selon votre système. Ensuite, tous vos alias sont dans un seul fichier. C'est également le mécanisme standard pour accomplir votre tâche. La section "alias de commande" présente quelques alias de shell couramment définis utilisés pour les commandes git. Il existe de meilleures ressources et tutoriels à ce sujet, il se trouve que c'est un lien que j'avais ouvert.
SherylHohman