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

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

Faites simplement :

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

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

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

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