af83

Git Monthly #1 == Git Weekly #3 + #4 + #5 + #6

Onzième jour

Je veux supprimer les branches distantes qui n'existent plus.

git fetch -p origin

Récupèrera les objets de origin et supprimera les branches distantes qui n'existent plus. Vous aurez un 'git branch -a' correct.


Douzième jour

Je veux revenir à un commit en oubliant tout ce qui est en cours:

git reset --hard SHA1

Vous mettra dans l'état du commit en paramètre. Tout ce que vous avez pu modifier ou commiter est perdu (enfin pas tout à fait). Si vous avez déjà pushé les commits en question c'est une mauvaise pratique.

git help reset


treizième jour

Je veux initialiser un dépôt git pour ma config système.

git init /etc

Initialisera un dépôt git dans /etc. Alors pour votre bout de code qui-ne-sera-pas-réutilisé-c'est-sur, git init && git add . && git commit.

git help init


Quatorzième jour

Je veux annuler un commit.

git revert SHA1

Va créer un commit avec l'exacte inverse du commit passé en paramètre. Vous pouvez aussi lui donner une suite de commits à annuler.

git help revert


Quinzième jour

Je veux savoir sur quelles branches se trouve un commit.

git branch --contains SHA1

Vous listera les branches en question.

git help branch


Seizième jour

Je veux annuler mon dernier commit.

git reset --soft HEAD^

Votre dernier commit sera annulé et vos modifications seront mise dans votre zone de staging. Pour info c'est ce que fait git commit --amend.

git help reset


Dix-septième jour

Je veux rajouter une super commande 'chuck' qui répond 'norris' (ahah).

   $ cat > /usr/local/bin/git-chuck <<< EOF
   #!/bin/sh
   echo 'norris'
   EOF
   $ chmod +x /usr/local/bin/git-chuck
   $ git chuck

Cela va créer un executable "git-chuck" qui répond simplement "norris". git reconnait les exécutables qui se nomment git-xxx. C'est comme cela que fonctionne :

et beaucoup d'autres.


Dix-huitième jour

Je veux voir les commits qui sont dans une branche et pas dans une autre.

git log origin/master --not origin/develop

Vous listera les commits qui sont dans la branche master mais pas dans develop.

git help log


Dix-neuvième jour

Après Paques, il est temps de cueillir les cerises (ahah).

Je veux récupérer un commit qui est sur une autre branche.

git cherry-pick SHA1

Va récupérer le commit SHA1 et l'appliquer sur la branche courante. Attention, le commit parent n'étant pas le même, le SHA1 va changer.

git help cherry-pick


Vingtième jour

Je veux faire une archive de mon dépôt git.

git archive --format tar -o backup.tar HEAD

Vous créera une archive tar backup.tar du HEAD.

git help archive


Vingt-et-unième jour

Je veux voir les messages de commit avec le diff.

git log -p

Va vous afficher une vue log classique mais avec le diff juste en dessous.

git help log


Vingt-deuxième jour

Je veux visualiser les changements d'une manière lisible pour le texte.

git diff --color-words

Va afficher les différences pour chaque mot plutôt que par ligne.

git help diff


Vingt-troisième jour

Je veux chercher "plop" dans mon dépôt git.

git grep "plop"

Vous renverra toutes les lignes qui ont "plop".

git help grep


Vingt-quatrième jour

Je veux rechercher une modification qui ajoute ou supprime "plop"

git log -S "plop"

Vous retournera toutes les révisions ou l'on trouve "plop". A utiliser avec l'option -p en général.

git help log


Vingt-cinquième jour

Je veux préparer mes patchs pour les envoyer par email.

git format-patch SHA1

Écrira le patch dans un fichier, pour l'envoyer par email par exemple, ou simplement le partager.

git help format-patch


Vingt-sixième jour

Je veux retirer un fichier pour le prochain commit.

git rm --cached path/to/file

Marquera le fichier pour suppression pour le prochain commit mais ne le supprimera pas du système de fichier. Pratique si vous avez fait une petite bêtise :).

git help rm


Vingt-septième jour

Une commande git par jour, aujourd'hui c'est en BD et en pièce jointe.

L'image vient de http://www.nojhan.net/geekscottes/ et est sous licence http://creativecommons.org/licenses/by-sa/3.0/.

Geekscotte


Vingt-huitième jour

Vous voulez rechercher le commit qui a introduit une régression.

git bisect start

Va démarrer une session de recherche de bug. Bisect va vous placer sur des commits spécifique, et vous devrez les marquer bon ou mauvais pour finalement trouver le commit correspondant.

git help bisect


Vingt-huitième jour une heure plus tard

Comme je trouve que tu passe un peu rapidement sur cette super commande :

  • "git bisect start" commence le bisect
  • "git bisect bad" marque le commit courant comme mauvais
  • "git bisect good HEAD~20" précise qu'il y a 20 commits il n'y avait pas de bug

Et avec un script de test (un script shell, une tâche Rake, etc. qui renvoie bien 0 si le test passe et autre chose dans le cas inverse).

  • "git bisect run mon_script_de_test" va se placer sur chaque commit et utiliser le script pour trouver automatiquement le commit qui a introduit le bug, sans qu'on ait besoin d'une autre manipulation.

Dominique


Vingt-neuvième jour

Je veux optimiser un dépôt git un peu gros.

git gc

Supprimera tous les objets perdu et compressera nombre de révisions. Si votre dépôt est un peu gros, git lance gc automatiquement.

git help gc

Comme c'est le dernier je vous recommande :


Trentième jour

Je veux que mon bash affiche dans quelle branche je suis. Dans ~/.bashrc, j'ajoute en fin de fichier :

PS1='\w\e[1;32m$(__git_ps1)\e[m$ '

\w indique le répertoire courant, \e[1;32m démarre une chaine en vert flashy, $(__git_ps1) correspond à votre branche et \e[m revient à la couleur normale.


Trente et unième jour

Je veux des alias pour mes commandes usuelles.

Dans ~/.gitconfig, je complète :

   [alias]
    st = status
    a = add
    ci = commit
    br = branch
    co = checkout
    cpk = cherry-pick
    d = diff

Ces alias seront immédiatement disponibles, sans avoir à recharger quoi que ce soit.


Trente deuxième jour

Je veux des couleurs partout ! Dans ~/.gitconfig, je complète :

   [color]
    ui = true
   [color "diff"]
    meta = yellow
    frag = cyan
    old = red
    new = green

Dans les diffs, les lignes supprimées seront en rouge et celles ajoutées en vert.

NB.

La plupart des git dailys vous ont été composés par François… mais les quelques derniers par Julien.. donc merci. Moi je ne fais que publier :)

blog comments powered by Disqus