Sous windows : https://git-scm.com/

– git init : création du dépôt initial

– git status : état du versioning, résumé de fichiers en attente de commit / fichiers non suivis (en staging et unstaging)

– git add <fichier> / <dossier> : mettre les fichiers en attente de commit (en zone de staging)

– git add –all : ajouter tous les fichiers/dossiers en attente de commit, ainsi que les fichiers supprimés

– git add . : même commande que git add -all, mais ne stage pas les fichiers supprimés

– git commit -m « description du commit » : création d’un point de sauvegarde

– git commit -a -m « description » : commit les fichiers modifiés

– git log : information sur les derniers commit

– git log –oneline : infos sur une ligne des derniers commit

– git log –stat : affiche liste des fichiers modifiés par commit

– git log -p <fichier> : historique / infos sur les commit du fichier

– git diff

– git diff <fichier>

– git diff <commit>

– git diff <commit> <commit>

– Fichier .gitignore : spécifier les fichiers à ne pas commit, et ignorer par git status (un « type » de fichiers par ligne)

– git checkout <commit> : revenir en arrière en spectateur (à l’état « detached HEAD », pas de possibilité de faire des modifs)

– git checkout <commit> <fichier> : revenir en arrière sur un fichier et le mettre en attente de commit

– git checkout <branch>

– git checkout — <fichier> : supprimer les modifications locales et revenir à l’état du dernier commit

– git revert <commit> : inverse un commit et crée un nouveau commit, n’altère pas l’historique, tous les fichiers supprimés sont recréés et ceux supprimés sont recréés.

– git revert <commit> <fichier>

– git reset <fichier> : supprime <fichier> de la zone de staging, mais ne supprime pas les modifications en cours

– git reset HEAD <fichier>   ou    git reset — <fichier>: supprimer le fichier de la zone de staging

– git reset : supprime tous les fichiers de la zone de staging, sans supprimer les modifications.

– git reset –hard : renvoit le dossier de travail au niveau du dernier commit. Toutes modifications en cours seront perdues.

– git reset <commit> : revient en arrière jusqu’au <commit>, réinitialise la zone de staging et garde les modifications en cours. L’historique sera perdu (les commits suivant <commit> seront perdus, mais pas vos modifications). Cette commande vous permet surtout de nettoyer l’historique en resoumettant un commit unique à la place de commit trop éparses.

– git reset <commit> –hard : Permet de revenir au <commit> et réinitialise la zone de staging et le dossier de travail pour correspondre. Toutes les modifications, ainsi que tous les commits fait après le <commit> seront supprimés. A utiliser avec une extrême précaution !

– git reset <commit> –soft

– git branch : liste les branches

– git branch <branche> : crée la branche <branche>

– git branch -m <branche> : renomme la branche courante en <branche>

– git branch -d <branche> : supprime la branche <branche>, ne marche pas si cette branche n’a pas encore été fusionnée avec une autre

– git branch -D <branche> : force la suppression, même si elle n’a pas été fusionnée

– git checkout <branche> : aller sur la branche existante spécifiée

– git checkout -b <branche> : créer la branche si elle n’existe pas, et aller dessus

– git merge <branche> : fusionne la branche en cours avec la branche <branche>, git va choisir la façon de fusionner

2 types de fusion : fast-forward (ajoute la branche <branche> à la suite de la branche courante) et 3-way merge (crée un commit pour rattacher les 2 branches)

– git merge –no-ff <branche> : fusionne la branche en cours avec la branche <branche> en créant un commit de fusion

– git commit –amend : permet d’ajouter les fichiers en staging dans le commit précédent et permet la possibilité de changer le commentaire

– git rebase <branch> : déplace la branche en cours vers la branche <branch> et modifie sa base de départ (premier commit), en la mettant à la suite de la branche <branch>

– git rebase -i <branch> : l’option -i déclenche un rebase interactif, et nous permet de réorganiser manuellement les commits

  • pick, permet d’inclure le commit. On peut en profiter pour changer l’ordre des différents commit
  • reword, permet d’inclure le commit tout en ayant la possibiliter de changer le message
  • edit, permet d’éditer le commit. En séparant en plusieurs commits par exemple
  • squash, combine le commit avec le commit du dessus et permet de changer le message du commit
  • fixup, comme squash mais utilisera le message du commit situé au dessus
  • exec, permet de lancer des commandes shell sur le commit

– git rebase -i HEAD~10 : rebase interactif des 10 derniers commits

– git stash : met de côté les modifications en cours et les stock en mémoire, puis les « supprime » de la base en cours, pour pouvoir travailler sans les dernières modifications, et sans les commit

– git stash save « nom du stash » : nomme les stash

– git stash apply : rapplique les modifications du dernier stash sur la base en cours, sans supprimer le stash

– git stash drop : supprime le dernier stash

– git stash pop : rapplique les modifications du dernier stash et le supprime (équivaut à  apply + drop)

– git stash list : liste les stash sauvegardés

– git stash branch <demo> : créer la branche <demo> et créer un commit avec les fichiers du dernier stash

– git stash apply stash@{1} : pour appliquer la stash dont le nom est « stash@{1} »

– git stash show stash@{1} -p : détaille le contenu du stash

Créer une archive d’un commit

– git archive –format zip –output /full/path/to/zipfile.zip commit_id : créer une archive de tout le projet à partir de commit_id
– git archive -o patch.zip a9359f9 $(git diff –name-only a9359f9^..a9359f9)

Remote

– git remote -v
– git remote rm origin
– git remote add origin « url du repo »
– git push origin « branch »
– git pull origin « branch »

– git config –global user.name « mugen »
– git config –global user.email « test@test.fr »
– git config –global core.editor subl
– git config –global merge.tool filemerge

– git rm –cached monfichier : supprimer ce fichier dans le repository sans le supprimer dans les copies locales