Commandes GIT et protips excessivement pratiques

Y a pas que WordPress et le PHP dans la vie du dév, y a GIT aussi. Morceaux choisis en 777 mots.

Les commandes GIT et SSH qui suivent sont issus de l’agriculture biologique sans aucun pesticide.

7 commandes GIT pour se la raconter au bureau

Dire qu’un commit est un fix d’un autre commit

git commit --fixup COMMIT

ici remplacer « COMMIT » par le SHA-1 du commit à corriger.

Ajouter et committer directement un fichier sans faire de git add

git commit --only MON_FICHIER

Vérifier qu’on a pas des commits qui trainent sur la machine à pousser sur le dépôt distant

git log --branches --not --remotes

Voir les fichiers « untracked »

git ls-files --others

Modifier un commit mais pas le message associé

git add --all && git commit --amend --no-edit

Obtenir un résumé des commits par auteurs

git shortlog

Chercher dans GIT mais vie le contenu des fichiers

git log -S 'wp_safe_redirect'

remarque : pour retrouver le(s) fichier(s), il suffit de faire un git show des sha-1 des commits.

6 logiciels pour ne pas taper ces put**** de commandes de mer**

Certains sont allergiques aux lignes de commandes ou trouvent simplement le terminal inconfortable. Voici les logiciels par OS.

Mac

Pour mac GitUp est vraiment bien fait !

Télécharger

Un qui s’en tamponne de Linux (Mac et Windows)

Git Tower

Belle promesse. Rendu soigné.

Télécharger

Les Cross-platforms : Mac, Windows, Linux

L’incontournable smartgit

L’un des plus simples à prendre en main, l’interface n’y est pas particulièrement jolie mais elle n’est pas non plus hideuse.

Télécharger

Le joli Gitkraken

L’une des plus jolie interfaces graphiques pour GIT je trouve.

Télécharger 

Le « geekesque » Git Cola

L’outil est écrit en Python. L’interface est un peu austère à mon goût mais certain(e)s apprécient ce style.

Télécharger

L’ambitieux GitAhead

Lui, il ne se pose pas de questions, il dénonce tout ce que ses concurrents ne font pas et que lui propose :

We built GitAhead because we couldn’t find what we wanted in the Git world
Télécharger

4 notions essentielles

Je ne reviens pas sur les branches, tags, etc, je l’ai déjà fait dans d’autres billets.

Les conflits

Typiquement le truc dont on te parle pas quand on te présente GIT.

Souvent on doit modifier le même fichier aux mêmes endroits et là c’est la merde parce que GIT va plus s’y retrouver au moment de fusionner tout ça dans la branche principale du projet pour déployer des correctifs par exemple.

GIT, dans ce genre de cas, va rajouter des marqueurs dans le fichier pour nous dire ce qui se passe et aider à arbitrer les conflits.

Le checkout

La notion peut-être la moins comprise ! Pourtant c’est l’une des première qu’on apprend, mais en fait on sait pas ce qu’on fait. Le problème majeur : elle sert à faire tout et n’importe quoi. Comme la plupart des commandes GIT d’ailleurs lol

On parle parfois de répertoires physiques vs répertoires virtuels mais ça ne me semble pas clair. Je préfère distinguer deux cas.

1er cas : je précise seulement une branche ou un tag

GIT checkout va déplacer la « tête de lecture » mais ne touchera pas aux modifications en cours.

Tu peux débuter des modifications sur le projet par exemple en étant sur master, enregistrer tes fichiers via ton éditeur favori et  tester  la fameuse commande :

git checkout -b ma-nouvelle-branche

tes fichiers resteront inchangés.

2ème cas : je précise un nom de répertoire ou le nom d’un fichier

Maintenant si tu as commencé à travailler sur le header thème WordPress du projet et que tu fais :

git checkout 1.0.9 wp-content/themes/super-theme/header.php

là tes modifications vont être écrasées et tu auras le fichier header.php tel qu’il était après le commit vers lequel pointe le tag 1.0.9

Cette nuance est souvent source d’erreurs.

Le reset

Contrairement au checkout, le reset s’en fout de tes modifs en cours, si t’as rien enregistré tant pis pour toi. Le git reset est souvent mal utilisé, c’est la raison pour laquelle on va vous décourager de l’utiliser mais c’est parfaitement viable suivant le contexte (par exemple lors d’un rebase).

Le reset peut servir ! Exemple :

Tu as fait un commit message… de merde. Tu veux pas polluer l’historique avec des écritures qui servent à rien du tout :

git reset HEAD~1

Remarque : ceci n’est valable que si ton commit pourri est sur ta machine et que tu ne l’as pas encore poussé sur le dépôt distant.

 Le clean

Surtout toujours faire un dry-run !

git clean -df -n

On peut utiliser –dry-run ou -n. Cela permet de vérifier avant de supprimer un fichier et/ou des répertoires. Cette commande EFFACE les fichiers qui ne sont pas référencés dans votre versionning.

Conclusion

Que ce soit en ligne de commandes ou via une jolie/pratique/surpuissante interface graphique, GIT sait tout faire ou presque.