Présentation

Si vous connaissez dĂ©jĂ  bien GIT et que vous maĂ®trisez un minimum l’outil dans vos dĂ©veloppements, vous serez ravis d’apprendre que cette page recense quelques astuces qui vous simplifieront la vie !

Et qui sait, peut-ĂŞtre apporterez vous aussi une astuce ou deux sur cette page.

Optimisations diverses

RĂ©ordonner les objets GIT afin de gagner de la place

Lorsque vous effectuez la commande git count-objects dans votre dépôt, vous vous rendrez sûrement compte que le dépôt prend de la place inutilement.

Cette place peut se libĂ©rer Ă  l’aide de la commande suivante :

git repack && git prune

La première commande va réordonner les objets, la seconde faire le ménage.

RĂ©ordonner l’arbre de manière interactive

Ceci peut ĂŞtre dangereux. Les premières fois on ne maĂ®trise pas encore trop bien l’outil. Les suivantes on peut faire une gaffe.

Cette manipulation d’arbre est Ă  faire sur les commits qui n’ont pas encore Ă©tĂ© envoyĂ© sur le dĂ©pĂ´t distant.

Ceci pour Ă©viter des conflits a posteriori.

git rebase --interactive

Pour en savoir plus je vous invite grandement Ă  lire la documentation git officielle sur la modification des commits .

En relation avec les commits

Retourner au dernier commit effectué

Cela aura pour conséquence de perdre les modifications effectuées entre-temps.

git revert HEAD

Enlever un fichier se trouvant dans la liste “Changes to be committed: "

N’oubliez pas les tirets «--» sous peine de supprimer votre dernier «commit» !

Faites simplement :

git reset -- /chemin/vers/depot/git/fichier

Enlever un fichier se trouvant dans la liste des “Changed but not updated: "

N’oubliez pas les tirets «--» sous peine de supprimer votre dernier «commit» !

Faites simplement :

git checkout -- /chemin/vers/depot/git/fichier

Faire plusieurs commits avec un fichier modifié à plusieurs endroits

Il peut arriver qu’on veuille faire un commit d’un morceau de fichier, puis un commit de l’autre morceau de fichier modifiĂ©.

Cependant GIT voit le fichier comme modifiĂ© et l’ajoute tel quel Ă  la liste des choses Ă  commiter.

Pour permettre l’ajout d’une partie du fichier dans le commit, puis le reste des modifications dans un, voire plusieurs, commits, il suffit d’utiliser la commande suivante :

git add --patch mon_fichier

Ensuite pour voir que tout est OK on fait :

git diff --cached

Et finalement :

git commit

Recommencez autant de fois que nĂ©cessaire jusqu’Ă  commiter toutes vos modifications.

Nombre de commit par auteur

Il suffit d’aller dans le dĂ©pĂ´t et de lancer la commande suivante (sous un SHELL bash/zsh/sh/autre):

git log --pretty=%ae|sort|uniq -c

Variables disponibles :

Changer des informations de commit suivant un critère

Il arrive parfois de vouloir changer un pseudo ou un nom en autre chose pour diverses raisons (oubli de configuration de son adresse courriel, nom au lieu de pseudo, etc.). Pour cela il suffit de suivre un peu le script suivant (en adaptant) :

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Ancien nom>" ];
        then
                GIT_COMMITTER_NAME="<Nouveau Nom>";
                GIT_AUTHOR_NAME="<Nouveau Nom>";
                GIT_COMMITTER_EMAIL="<Nouveau courriel>";
                GIT_AUTHOR_EMAIL="<Nouveau courriel>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

Antidater un commit

Il suffit d’utiliser la variable d’environnement GIT_AUTHOR_DATE avant de faire un commit, par exemple :

GIT_AUTHOR_DATE="2015-11-05 15:42:06" git commit

Et votre commit sera fait Ă  la date voulue.

Les branches

Créer une branche distante

git checkout -b nouvelle_branche
git push origin nouvelle_branche

Récupérer une branche distante

git pull
git branch -a
git checkout --track origin/nom_branche_distante

Si on veut renommer la branche locale avec un autre nom, on fait :

git checkout --track -b ma_branche_locale origin/nom_branche_distante

Attacher une branche distante Ă  une branche que nous avons

Nous avons crĂ©e une branche Ă  l’aide de la commande git branch ma_super_nouvelle_branche, mais nous voulions qu’elle soit attachĂ©e Ă  la branche distante ma_branche_distante. Dans ce cas nous devons faire :

git branch --set-upstream ma_super_nouvelle_branche origin/ma_branche_distante

Supprimer une branche distante

git push origin :branche_distante

Si la branche a le mĂŞme nom qu’un tag :

git push origin :refs/heads/branche_distante

Fusion d’une branche Ă  une autre en gardant l’historique

On se rend dans la branche qu’on veut garder. Puis on incorpore l’autre branche.

git checkout mabranche
git merge --no-ff autrebranche

Comparer 2 branches

Je vous propose 2 méthodes :

Afficher le détail de ce qui a changé

Il suffit de donner les deux branches à comparé séparées par 2 points :

git diff maBranche..master

Afficher seulement les noms de fichiers ajoutés/modifiés/supprimés

Ajoutez –name-status en argument de git diff :

git diff --name-status maBranche..master

Afficher le nom du remote de la branche courante

On va utiliser les possibilités de git config.

@ représente HEAD.

git config --get branch.`git rev-parse --abbrev-ref --symbolic-full-name @`.remote

Les tags

Pousser sur le dépôt distant les tags locaux

git push --tags

Supprimer un tag distant

git tag -d MonTag
git push origin :refs/tags/MonTag

Personnalisation

Auto complètement des commandes GIT

Un script permet de compléter automatiquement les commandes, à la manière de BASH.

Ce dernier est disponible sur le dépôt GIT du projet GIT .

Ainsi :

source ~/git-completion.bash
source ~/.bashrc

Essayez ; profitez.

Omettre certains fichiers de l’historique (fichier ignore)

Parfois certains fichiers nous embêtent littéralement dans nos commandes git status (entre autre).

Ces fichiers peuvent ĂŞtre des binaires gĂ©nĂ©rĂ©s lors des tests, des fichiers personnels utilisĂ©s pour le projet, des fichiers temporaires de diffĂ©rents utilitaires d’Ă©dition de code, etc.

Deux mĂ©thodes s’offrent Ă  vous pour ignorer les fichiers :

La méthode partagée, pour tout les utilisateurs du dépôt

Cette mĂ©thode permet de dĂ©livrer sur le dĂ©pĂ´t git un ensemble de règles pour omettre des fichiers qui ne sont pas nĂ©cessaires Ă  l’avancement du projet ou pour toute autre raison que ce soit.

Pour cela faites :

*.pyc
*~
*.swp

Ceci vous permet de partager avec les autres utilisateurs ce qu’il faut ignorer (pour Ă©viter de faire trop d’objets git dans le dĂ©pĂ´t).

La mĂ©thode “personnelle”

Cette mĂ©thode est la mĂŞme, crĂ©ez le fichier que vous voulez Ă  l’endroit que vous voulez, par exemple : ~/.gitignore, puis dites Ă  git oĂą trouver ce fichier pour l’utiliser, via la commande :

git config --global core.excludesfile ~/.gitignore

Remplissez avec des règles qui vont bien.

Liens utiles