La première zone représente le dossier courant. La seconde, la zone de staging (un fichier retenu dans un état). La dernière représente la validation (le commit), c'est à dire une version à l'instant t des fichiers.
git config --global user.name "Baptiste Lecocq"
git config --global user.email "hello@tiste.io"
git init
Crée un repository, i.e. un dossier de travail
Un dossier .git
contient toutes les informations nécessaires à git pour fonctionner.
git add filename.txt
git add .
git add -A
Ajoute les fichiers modifiés (du Working directory) dans la zone d'index (le stage)
git commit -m "feat(users): add missing validation on name"
Créé une version locale des modifications des fichiers (présents dans la zone d'index)
git log
Permet de voir tous les commit effectués (complété avec --pretty
et --graph
, cela donne un beau visuel)
git status
Affiche l'état actuel (en réalité, la vie) du repo
Les différentes zones y sont représentées.git rm filename.txt
Supprime un fichier du repo git
Supprimer un fichier à la main ne le supprimera pas pour les futurs commit. C'est pour cela qu'avant de faire un git commit, il est préférable de regarder si le fichier est bien supprimé.
Remarque : le fichier sera toujours disponible pour les commit antérieurs.
git diff
git diff master..develop
Affiche les modifications effectuées mais pas encore "on stage"
L'ajout de l'option --cached
affichera les différences entre les fichiers "on stage" et le dernier commit.
git branch branchname
Crée une branche
git checkout -b branchname
Crée une branche et s'y déplace
C'est en réalité la contraction de git branch branchname
et de git checkout branchname
git checkout master
Se déplace sur une branche
git merge --no-ff branchname
Fusionne la branche nommée avec la branche courante
--no-ff ?
--no-ff
Lorsque git merge, il utilise l'ancètre commun et les deux derniers commits des branches à merger
--no-ff
L'historique sera plus lisible et plus simple à réécrire, dans le cas d'un défaut
Squashing
GitHub propose un mode de "squash & merge" qui permettra de regrouper la feature en un seul et unique commit
git checkout -- filename.txt
Réinitialise un fichier modifié
git revert e285d87
Annule les modifications d'un commit dans un nouveau commit
git tag v0.1
git tag v0.1 e285d87
Crée un tag sur le commit courant ou un commit spécifique
git commit --amend
Fusionne les changements de la zone d'index avec le dernier commit
À ne faire que sur sa propre branche, car l'identifiant du commit changera.
master
: Releases, tagguéesdevelop
: Releases mineuresfeature/cache-conf
: Une fonctionnalité par personnehotfix/navbar
: Fix urgent pour la productionrelease/1.1.42
: Mise en productionmaster
: Releases, tagguéesdevelop
: Releases mineuresfeature/cache-conf
: Une fonctionnalité par personnehotfix/navbar
: Fix urgent pour la productionrelease/1.1.42
: Mise en productionOui, ce fond a déjà été utilisé.
git clone git@github.com:tiste/credit-card.git
Copie un repository en local
Le chemin peut prendre la forme d'un ssh, http, chemin système et même ftp.
git peut avoir plusieurs dépôts distants : les remotes
origin
est le nom de celle par défaut
git add remote upstream git@bitbucket.com:tiste/credit-card.git
Ajoute une remote "upstream
"
git push origin master
Publie les changements sur une branche spécifique d'une remote spécifique
Tip : git config --global push.default simple
pushera les modifications de la branche courante en remote avec git push
git pull --rebase
git fetch + git merge
Tire les changements de la remote vers le local
fetch
ne fait que récupérer les modifications sans les appliquer à la branche courante locale. merge
va appliquer les modifications remote à la branche courante locale.
--rebase
Permet de mettre de côté nos commits locaux, de fusionner la branche courante avec la remote, et enfin de réappliquer nos anciens commits locaux