Permets d’enregistrer les modifications dans le dépôt.
git status
git diff
Il est possible de spécifier un fichier après diff
:
git diff fichier1
Ajouter des fichiers modifiés spécifiques :
git add fichier1 fichier2
Ajouter tous les fichiers modifiés :
git add *
git commit -m "Message court sur les modifications apportées"
git add
+ git commit
Inclut tous les fichiers listés dans git status
:
git commit -a
Indique précisément quels fichiers inclure dans le commit :
git commit fichier1 fichier2
Visualiser les différents commits de la branche active.
git log
Options utiles: -p
ou –stat
Afficher les logs des 3 derniers commits :
git log -n 3
Afficher les logs d’une branche :
git log nomBranche
git commit –amend
On souhaite squasher nos commits qui se suivent dans l’historique, sur la même branche.
Très utile si un commit à été fait, mais il y a une modification manquante. (ex. fichier manquant, erreur de syntaxe).
On peut cibler les commits avec plusieurs méthodes :
Prendre en compte les 3 derniers commits :
git rebase -i HEAD~3
Prendre en compte à partir d’un commit spécifique en ciblant le HASH du commit précédant
git rebase -i idCommit
On entre alors en mode interactif (on utilise l’éditeur de git). Les commits sont affichés du plus ancien au plus récent.
Exemple :
pick fbde9fd Add Readme.md
pick 70aaed5 Update Readme
pick ccf2779 Update Readme again
pick 8c706b5 Update Readme again and again
Le premier commit correspond à celui de base, celui que l’on souhaite conserver ; on laisse donc l’instruction pick
devant. On souhaite squasher tous les commits suivants, on met donc l’instruction squash
devant. (vous pouvez aussi utiliser l’alias s
à la place de squash
)
On obtient alors :
pick fbde9fd Add Readme.md
squash 70aaed5 Update Readme
squash ccf2779 Update Readme again
squash 8c706b5 Update Readme again and again
Concrètement, on dit à GIT de se baser sur le premier commit et on lui applique tous les suivants pour n’en faire qu’un seul.
Lorsque l’on valide le squash (on quitte le mode interactif), Git vas réappliquer les commits dans le même ordre qu’ils aient été configurés juste avant. On met alors un message de commit qui concerne le regroupement de nos commits et c’est tout.
On peut ensuite vérifier toujours à l’aide de la commande git que nos commits ont bien été squashés. Il ne vous reste plus qu’à pousser vos modifications :
git push origin master --force
Note : Pensez à bien utiliser l’option
-–force
car le rebase doit écraser l’ancien historique des commits. Attention, l’option--force
ne doit être utilisée que sur votre propre fork !
Les fichiers restent modifiés :
git reset HEAD^
Les changements effectués dans les fichiers seront perdus :
git reset –hard HEAD^
git revert idDuCommit
git checkout fichierName
git tag
git tag nomTag
git tag -a nomTag
git tag nomTag idCommit
git push origin nomTag
git checkout nomTag
git tag -d nomTag
Par défaut un dossier vide ne peut être versionné. Pour remédier à cela, il existe une convention de nommage d’un fichier temporaire nommé “.gitkeet” que l’on ajoute au dossier pour le versionner.
Pour ignorer des fichiers ou dossiers du versionning afin de ne pas sauvegarder par exemple des fichiers temporaires.
On créer un fichier “.gitignore” :
*.log
cache/*
!/cache/.gitkeep
Dans l’exemple ci-dessus on exclut les fichiers avec l’extension .log
, tous les fichiers inclus dans le dossier cache/
sauf le fichier .gitkeep
.