7.1 KiB
Git
Introduction
- Outil de gestion de versions,
- Créé par L. TORVALDS,
- Fonctionnement décentralisé.
Commandes
Commande | Action |
---|---|
git init |
Crée un nouveau dépôt |
git clone |
Clone un dépôt distant |
git add |
Ajoute de nouveaux blobs dans la base des objets pour chaque fichier modifié depuis le dernier commit. Les objets précédents restent inchangés |
git commit |
Intègre la somme de contrôle SHA-1 d'un tree et les sommes de contrôle des commits parents pour créer un nouvel commit |
git branch |
Liste les branches |
git merge |
Fusionne une branche dans une autre |
git rebase |
Déplace les commits de la branche courante devant les nouveaux commits d’une autre branche |
git log |
Affiche la liste des commits effectués sur une branche |
git push |
Publie les nouvelles révisions sur le remote |
git pull |
Récupère les dernières modifications distantes du projet (depuis le Remote) et les fusionne dans la branche courante |
git stash |
Stocke de côté un état non commité afin d’effectuer d’autres tâches |
git checkout |
Annule les modifications effectuées, déplacement sur une référence (branche, hash) |
git switch |
Changement de branche |
git remote |
Gestion des remotes |
Pour positionner HEAD
:
- Au commit père :
git checkout HEAD^
ougit checkout HEAD~1
, - En cas de plusieurs pères :
git checkout HEAD^2
pour positionner au second père, - Au commit grand-père :
git checkout HEAD^^
ougit checkout HEAD~2
HEAD
est detached lorsqu'un checkout est effectué sur un commit et non pas une branch.
Pour forcer le déplacement d'une branche : git branch -f <nom_branche> <commit>
.
Pour retourner en arrière :
-
Branche locale :
git reset <commit>
(position où nous souhaitons être).-
Différentes options :
--soft
: le commit sera supprimé mais les changements seront conservés et stashed,--mixed
(par défaut) : le commit sera supprimé mais les changements seront conservés et unstashed,--hard <commit_ref>
pour les changements à ne pas conserver.
-
-
Branche distante (remote) :
git revert <commit_ref>
:- Création d'un nouveau commit qui inversera les modifications apportées par le
<commit_ref>
, - Conservation de l'historique,
- Pour supprimer plusieurs commit consécutifs :
git revert <older_ref>..<newer_ref>
(<older_ref>~
exclu,<newer_ref>
inclus).
- Création d'un nouveau commit qui inversera les modifications apportées par le
Pour copier une série de commits après l'emplacement actuel (HEAD) : git cherry-pick <commit_1> <commit_2> <...>
Rebase interractif (git rebase -i
) permet de :
- Réarranger les commits,
- Omettre certains commits (pick),
- Ecraser des commits.
Pour modifier le dernier commit : git commit --amend
.
Pour décrire (describe) les changements entre HEAD et le tag le plus récent : git describe
(git describe <ref>
sinon).
Pour mettre à jour une branche distante : git fetch
:
- Télécharge les commits que le dépôt distant possède mais qui ne sont pas dans le notre, puis,
- Met à jour nos branches distantes (par exemple, origin/main),
- Ne met par à jour nos branches locales (par exemple, main),
Pour rapatrier (fetch) les branches distantes et les fusionner (merge) : git pull
.
Pour rapatrier (fetch) les branches distantes et rebase : git pull --rebase
Pour créer une branche afin que celle-ci suive une distante :
- Création d'une nouvelle branche : ~git checkout -b <branche_locale> <branche_distante> ;git
pull~,
- La branche existe déjà :
git branch -u <branche_distante> <branche_locale>
Correction
Pour supprimer un fichier du dernier commit non pushed : git reset --soft HEAD <filename>
.
Pour commiter la correction d'un précédent commit :
git commit --fixup <hash_commit_à_corriger>
git rebase -i --autosquash
Comparaison
Pour comparer deux branches : git diff <branche_a>..<branche_b>
.
Pour comparer un fichier ou un répertoire entre deux branches : git diff <branche_a>..<branche_b> -- <path>
.
Ajouter l'option -w
à git diff pour ignorer les espaces.
Logs
Pour afficher l'historique d'une fonction ou d'un fichier : git log -L:<class_name>:<filename>
Pour afficher les dernières positions de HEAD : git reflog
.
Outils tiers
Apprentissage
Git-gud
Jeu en ligne de commande permettant d'apprendre l'usage de Git.
learngitbranching.js.org
Site permettant l'apprentissage de l'usage de Git.