Git
Commandes Git
⚙️ Configuration initiale de Git
git config --global user.name "Ton Nom"
git config --global user.email "[email protected]"
git config --global core.editor "code --wait" # Définir VS Code comme éditeur
git config --global init.defaultBranch main # Définir 'main' comme branche par défaut
git config --list # Voir toute la configuration
📁 Initialisation et Clonage
git init # Initialise un dépôt local
git clone <url_du_repo> # Clone un dépôt distant
git clone <url> <nom_dossier> # Clone dans un dossier spécifique
git clone --depth 1 <url> # Clone uniquement le dernier commit (plus rapide)
📄 Gestion des fichiers
git status # Voir l'état des fichiers
git status -s # Version courte du status
git add <fichier> # Suivre un fichier
git add . # Suivre tous les fichiers modifiés
git add *.js # Suivre tous les fichiers .js
git reset <fichier> # Enlever un fichier de l'index
git rm <fichier> # Supprimer un fichier du dépôt
git rm --cached <fichier> # Retirer du suivi sans supprimer
git mv <ancien> <nouveau> # Renommer un fichier
💬 Commits & Historique
git commit -m "Message" # Enregistre les modifications
git commit -am "Message" # Add + commit en une seule commande
git commit --amend # Modifier le dernier commit
git commit --amend -m "Nouveau message" # Modifier le message du dernier commit
git log # Historique des commits
git log --oneline # Historique condensé
git log --graph --oneline --all # Graphique de l'historique
git log -p # Affiche les différences dans chaque commit
git log --author="Nom" # Commits d'un auteur spécifique
git log --since="2 weeks ago" # Commits des 2 dernières semaines
git diff # Voir les modifications non staged
git diff --staged # Voir les modifications staged
git show <hash_commit> # Voir le détail d'un commit
git blame <fichier> # Voir qui a modifié chaque ligne
🌿 Branches
git branch # Liste les branches locales
git branch -a # Liste toutes les branches (locales + distantes)
git branch <nom> # Crée une nouvelle branche
git checkout <nom> # Bascule vers une branche
git checkout -b <nom> # Crée et bascule en même temps
git switch <nom> # Bascule vers une branche (commande moderne)
git switch -c <nom> # Crée et bascule (commande moderne)
git merge <branche> # Fusionne une branche
git merge --no-ff <branche> # Fusion avec commit de merge explicite
git branch -d <nom> # Supprime une branche locale (safe)
git branch -D <nom> # Force la suppression d'une branche
git push origin --delete <nom> # Supprime une branche distante
🔧 Résolution de Conflits
git status # Voir les fichiers en conflit
# Éditer manuellement les fichiers en conflit
git add <fichier_résolu> # Marquer le conflit comme résolu
git commit # Finaliser la résolution
git merge --abort # Annuler une fusion en cours
git rebase --abort # Annuler un rebase en cours
# Outils de merge
git mergetool # Ouvrir un outil graphique de résolution
git diff --ours # Voir la version locale
git diff --theirs # Voir la version distante
git checkout --ours <fichier> # Garder la version locale
git checkout --theirs <fichier> # Garder la version distante
🗂️ Stash (Sauvegardes temporaires)
git stash # Sauvegarder les modifications en cours
git stash save "Message" # Stash avec un message descriptif
git stash list # Liste des stashs
git stash show # Voir le contenu du dernier stash
git stash show -p # Voir les différences du dernier stash
git stash apply # Appliquer le dernier stash (le garde)
git stash pop # Appliquer et supprimer le dernier stash
git stash drop # Supprimer le dernier stash
git stash clear # Supprimer tous les stashs
git stash apply stash@{2} # Appliquer un stash spécifique
☁️ Dépôt distant (GitHub/GitLab)
git remote -v # Voir les remotes
git remote add origin <url> # Ajouter un remote
git remote rename origin upstream # Renommer un remote
git remote remove origin # Supprimer un remote
git push origin <branche> # Pousser vers le dépôt distant
git push -u origin <branche> # Push et définir upstream
git push --all # Pousser toutes les branches
git pull origin <branche> # Récupérer et fusionner les changements
git pull --rebase # Pull avec rebase au lieu de merge
git fetch # Récupère sans fusion
git fetch --all # Récupère de tous les remotes
git fetch --prune # Nettoie les branches distantes supprimées
git tag # Liste tous les tags
git tag v1.0.0 # Créer un tag léger
git tag -a v1.0.0 -m "Version 1.0.0" # Tag annoté avec message
git tag -a v1.0.0 <commit_hash> # Tag sur un commit spécifique
git push origin v1.0.0 # Envoyer un tag
git push origin --tags # Envoyer tous les tags
git tag -d v1.0.0 # Supprimer un tag local
git push origin --delete v1.0.0 # Supprimer un tag distant
git show v1.0.0 # Voir les détails d'un tag
🧼 Annulations & Corrections
git restore <fichier> # Annule changements non commités
git restore --staged <fichier> # Unstage un fichier
git reset HEAD <fichier> # Unstage un fichier (ancienne méthode)
git reset --soft HEAD~1 # Annule le dernier commit (garde fichiers staged)
git reset --mixed HEAD~1 # Annule commit + unstage (garde modifications)
git reset --hard HEAD~1 # Supprime commit + fichiers (DANGER!)
git reset --hard origin/main # Reset à l'état du remote
git revert <commit_hash> # Inverse un commit sans réécrire l'historique
git revert HEAD # Inverse le dernier commit
git clean -n # Voir les fichiers non suivis à supprimer
git clean -fd # Supprimer fichiers et dossiers non suivis
🚀 Commandes Avancées
Rebase
git rebase <branche> # Rebaser sur une autre branche
git rebase -i HEAD~3 # Rebase interactif des 3 derniers commits
git rebase --continue # Continuer après résolution de conflit
git rebase --skip # Sauter un commit problématique
git rebase --abort # Annuler le rebase
# Options du rebase interactif:
# pick = garder le commit
# reword = modifier le message
# edit = modifier le commit
# squash = fusionner avec le commit précédent
# drop = supprimer le commit
Cherry-pick
git cherry-pick <commit_hash> # Appliquer un commit spécifique
git cherry-pick <hash1> <hash2> # Appliquer plusieurs commits
git cherry-pick --continue # Continuer après résolution
git cherry-pick --abort # Annuler le cherry-pick
Bisect (Recherche de bugs)
git bisect start # Démarrer la recherche
git bisect bad # Marquer le commit actuel comme mauvais
git bisect good <commit_hash> # Marquer un commit comme bon
# Git va tester automatiquement les commits intermédiaires
git bisect reset # Terminer la recherche
Reflog (Historique des actions)
git reflog # Voir l'historique de toutes les actions
git reflog show <branche> # Reflog d'une branche spécifique
git reset --hard HEAD@{2} # Revenir à un état antérieur
🔀 Workflows Git
GitFlow
# Branches principales
main (ou master) # Version production
develop # Branche de développement
# Démarrer une feature
git checkout -b feature/nom-feature develop
# ... développement ...
git checkout develop
git merge --no-ff feature/nom-feature
git branch -d feature/nom-feature
# Créer une release
git checkout -b release/1.0.0 develop
# ... corrections mineures ...
git checkout main
git merge --no-ff release/1.0.0
git tag -a v1.0.0
git checkout develop
git merge --no-ff release/1.0.0
git branch -d release/1.0.0
# Hotfix
git checkout -b hotfix/1.0.1 main
# ... correction urgente ...
git checkout main
git merge --no-ff hotfix/1.0.1
git tag -a v1.0.1
git checkout develop
git merge --no-ff hotfix/1.0.1
git branch -d hotfix/1.0.1
Feature Branch Workflow
# Créer une branche pour chaque feature
git checkout -b feature/nouvelle-fonctionnalite main
# ... développement ...
git push -u origin feature/nouvelle-fonctionnalite
# Créer une Pull Request sur GitHub/GitLab
# Après review et approbation:
git checkout main
git pull origin main
git merge feature/nouvelle-fonctionnalite
git push origin main
git branch -d feature/nouvelle-fonctionnalite
Trunk-Based Development
# Commits fréquents directement sur main
git checkout main
git pull origin main
# ... petites modifications ...
git add .
git commit -m "feat: petite amélioration"
git push origin main
🔄 Passer d'un dépôt HTTPS à SSH
# Vérifier l'URL actuelle
git remote -v
# Changer pour SSH
git remote set-url origin [email protected]:TonUser/nom-du-repo.git
# Vérifier le changement
git remote -v
🔍 Recherche & Investigation
git grep "mot-clé" # Rechercher dans le code
git log -S "fonction" # Trouver quand une fonction a été ajoutée/supprimée
git log --grep="bug" # Rechercher dans les messages de commit
git shortlog # Résumé des commits par auteur
git shortlog -sn # Nombre de commits par auteur
📊 Statistiques & Informations
git log --stat # Stats de chaque commit
git diff --stat # Statistiques des modifications
git show --stat # Stats d'un commit
git ls-files # Liste tous les fichiers suivis
git count-objects -vH # Taille du dépôt
🛡️ .gitignore
# Créer un .gitignore
touch .gitignore
# Exemples de contenu:
node_modules/
*.log
.env
.DS_Store
dist/
build/
# Ignorer un fichier déjà suivi
git rm --cached <fichier>
echo "<fichier>" >> .gitignore
git commit -m "Ignore <fichier>"
💡 Astuces & Raccourcis
# Alias utiles à ajouter dans ~/.gitconfig
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.last 'log -1 HEAD'
git config --global alias.unstage 'reset HEAD --'
git config --global alias.visual 'log --graph --oneline --all'
# Utilisation:
git st # Équivalent de git status
git co main # Équivalent de git checkout main
git visual # Graphique de l'historique
🚨 Commandes de Secours
Récupérer un commit supprimé
git reflog # Trouver le hash du commit
git cherry-pick <hash> # Récupérer le commit
# ou
git reset --hard <hash> # Revenir à cet état
Récupérer un fichier supprimé
git checkout <commit_hash> -- <fichier> # Restaurer depuis un commit
git restore --source=HEAD~2 <fichier> # Restaurer depuis 2 commits avant
Annuler un push (DANGEREUX!)
git reset --hard HEAD~1 # Annuler localement
git push --force origin <branche> # Force push (à éviter en équipe!)
📚 Ressources Supplémentaires
No comments to display
No comments to display