-
1. DĂ©marrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 Génération des clés publiques SSH
- 4.4 Mise en place du serveur
- 4.5 DĂ©mon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hébergé
- 4.10 Résumé
-
5. Git distribué
-
6. GitHub
-
7. Utilitaires Git
- 7.1 SĂ©lection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 RĂ©Ă©crire lâhistorique
- 7.7 Reset démystifié
- 7.8 Fusion avancée
- 7.9 Rerere
- 7.10 DĂ©boguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 Résumé
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gérée par Git
- 8.5 Résumé
-
9. Git et les autres systĂšmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 Résumé
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 Références Git
- 10.4 Fichiers groupés
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et récupération de données
- 10.8 Les variables dâenvironnement
- 10.9 Résumé
-
A1. Annexe A: Git dans dâautres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 Résumé
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et création des projets
- A3.3 Capture dâinstantanĂ© basique
- A3.4 Création de branches et fusion
- A3.5 Partage et mise Ă jour de projets
- A3.6 Inspection et comparaison
- A3.7 DĂ©bogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 SystĂšmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
2.4 Les bases de Git - Annuler des actions
Annuler des actions
Ă tout moment, vous pouvez dĂ©sirer annuler une de vos derniĂšres actions. Dans cette section, nous allons passer en revue quelques outils de base permettant dâannuler des modifications. Il faut ĂȘtre trĂšs attentif car certaines de ces annulations sont dĂ©finitives (elles ne peuvent pas ĂȘtre elles-mĂȘmes annulĂ©es). Câest donc un des rares cas dâutilisation de Git oĂč des erreurs de manipulation peuvent entraĂźner des pertes dĂ©finitives de donnĂ©es.
Une des annulations les plus communes apparaĂźt lorsquâon valide une modification trop tĂŽt en oubliant dâajouter certains fichiers, ou si on se trompe dans le message de validation.
Si vous souhaitez rectifier cette erreur, vous pouvez valider le complĂ©ment de modification avec lâoption --amend
 :
$ git commit --amend
Cette commande prend en compte la zone dâindex et lâutilise pour le commit. Si aucune modification nâa Ă©tĂ© rĂ©alisĂ©e depuis la derniĂšre validation (par exemple en lançant cette commande immĂ©diatement aprĂšs la derniĂšre validation), alors lâinstantanĂ© sera identique et la seule modification Ă introduire sera le message de validation.
LâĂ©diteur de message de validation dĂ©marre, mais il contient dĂ©jĂ le message de la validation prĂ©cĂ©dente. Vous pouvez Ă©diter ce message normalement, mais il Ă©crasera le message de la validation prĂ©cĂ©dente.
Par exemple, si vous validez une version puis rĂ©alisez que vous avez oubliĂ© dâindexer les modifications dâun fichier que vous vouliez ajouter Ă ce commit, vous pouvez faire quelque chose comme ceci :
$ git commit -m 'validation initiale'
$ git add fichier_oublie
$ git commit --amend
Vous nâaurez au final quâun unique commit â la seconde validation remplace le rĂ©sultat de la premiĂšre.
Note
|
Il est important de comprendre que lorsque vous ĂȘtre en train de modifier votre dernier commit, vous nâĂȘtes pas vraiment en train de le rĂ©parer, mais plutĂŽt de le remplacer complĂštement par un commit nouveau, amĂ©liorĂ© qui Ă©carte lâancien commit et vient Ă sa place. Dans les faits, câest comme si lâancien commit nâavait jamais eu lieu, et il nâapparaĂźtra plus dans lâhistorique de votre dĂ©pĂŽt. LâintĂ©rĂȘt immĂ©diat de la rectification de commit est de faire des petites amĂ©liorations de votre dernier commit, sans encombrer lâhistorique de votre dĂ©pĂŽt avec des messages de validations de la forme « Oups, jâavais oubliĂ© ce fichier » ou « Zut, correction dâune faute sur le dernier commit ». |
Note
|
Ne rectifiez que les commits qui ne sont que locaux et nâont pas Ă©tĂ© poussĂ©s. La rectification de commit qui ont Ă©tĂ© poussĂ©s et la poussĂ©e en force de branche risque de crĂ©er des problĂšmes avec vos collaborateurs. Pour plus dâinformation sur ce qui arrive si vous le faites et comment sâen sortir en fin de compte, lisez Les dangers du rebasage |
Désindexer un fichier déjà indexé
Les deux sections suivantes dĂ©montrent comment bricoler les modifications dans votre zone dâindex et votre zone de travail.
Un point sympathique est que la commande permettant de connaĂźtre lâĂ©tat de ces deux zones vous rappelle aussi comment annuler les modifications.
Par exemple, supposons que vous avez modifié deux fichiers et voulez les valider comme deux modifications indépendantes, mais que vous avez tapé accidentellement git add *
et donc indexé les deux.
Comment annuler lâindexation dâun des fichiers ? La commande git status
vous le rappelle :
$ git add .
$ git status
Sur la branche master
Votre branche est Ă jour avec 'origin/master'.
Modifications qui seront validées :
(utilisez "git reset HEAD <fichier>..." pour désindexer)
renommé : README.md -> README
modifié : CONTRIBUTING.md
Juste sous le texte « Modifications qui seront validĂ©es », elle vous indique dâutiliser git reset HEAD <fichier>âŠâ
pour désindexer un fichier.
Utilisons donc ce conseil pour désindexer le fichier CONTRIBUTING.md
 :
$ git reset HEAD CONTRIBUTING.md
Modifications non indexées aprÚs reset :
M CONTRIBUTING.md
$ git status
Sur la branche master
Votre branche est Ă jour avec 'origin/master'.
Modifications qui seront validées :
(utilisez "git reset HEAD <fichier>..." pour désindexer)
renommé : README.md -> README
Modifications qui ne seront pas validées :
(utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
(utilisez "git checkout -- <fichier>..." pour annuler les modifications dans la copie de travail)
modifié : CONTRIBUTING.md
La commande Ă taper peut sembler Ă©trange mais elle fonctionne.
Le fichier CONTRIBUTING.md
est modifiĂ© mais de retour Ă lâĂ©tat non indexĂ©.
Note
|
|
Pour lâinstant, cette invocation magique est la seule Ă connaĂźtre pour la commande git reset
.
Nous entrerons plus en détail sur ce que reset
réalise et comment le maßtriser pour faire des choses intéressantes dans Reset démystifié
Réinitialiser un fichier modifié
Que faire si vous réalisez que vous ne souhaitez pas conserver les modifications du fichier CONTRIBUTING.md
 ?
Comment le rĂ©initialiser facilement, le ramener Ă son Ă©tat du dernier instantanĂ© (ou lors du clonage, ou dans lâĂ©tat dans lequel vous lâavez obtenu dans votre copie de travail) ?
Heureusement, git status
vous indique comment procéder.
Dans le résultat de la derniÚre commande, la zone de travail ressemble à ceci :
Modifications qui ne seront pas validées :
(utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
(utilisez "git checkout -- <fichier>..." pour annuler les modifications dans la copie de travail)
modifié : CONTRIBUTING.md
Ce qui vous indique de façon explicite comment annuler des modifications que vous avez faites. Faisons comme indiqué :
$ git checkout -- CONTRIBUTING.md
$ git status
Sur la branche master
Votre branche est Ă jour avec 'origin/master'.
Modifications qui seront validées :
(utilisez "git reset HEAD <fichier>..." pour désindexer)
renommé : README.md -> README
Vous pouvez constater que les modifications ont été annulées.
Important
|
Vous devriez aussi vous apercevoir que câest une commande dangereuse : toutes les modifications que vous auriez rĂ©alisĂ©es sur ce fichier ont disparu â vous venez tout juste de lâĂ©craser avec un autre fichier. Nâutilisez jamais cette commande Ă moins dâĂȘtre vraiment sĂ»r de ne pas vouloir de ces modifications. |
Si vous souhaitez seulement écarter momentanément cette modification, nous verrons comment mettre de cÎté et créer des branches dans le chapitre Les branches avec Git ; ce sont de meilleures façons de procéder.
Souvenez-vous, tout ce qui a Ă©tĂ© validĂ© dans Git peut quasiment toujours ĂȘtre rĂ©cupĂ©rĂ©.
Y compris des commits sur des branches qui ont Ă©tĂ© effacĂ©es ou des commits qui ont Ă©tĂ© Ă©crasĂ©s par une validation avec lâoption --amend
(se référer au chapitre Récupération de données pour la récupération de données).
Cependant, tout ce que vous perdez avant de lâavoir validĂ© nâa aucune chance dâĂȘtre rĂ©cupĂ©rable via Git.
RĂ©initialiser les choses avec git restore
Git version 2.25.0 a introduit une nouvelle commande : git restore
.
Câest fondamentalement une alternative Ă git reset
que nous venons de traiter.
Depuis Git version 2.25.0, Git utilisera git restore
au lieu de git reset
pour beaucoup dâopĂ©rations de rĂ©initialisation.
Retraçons nos pas, et réinitialisons les choses avec git restore
au lieu de git reset
.
Désindexer un fichier indexé avec git restore
Les deux sections suivantes dĂ©montrent comment travailler avec votre zone dâindex et votre rĂ©pertoire de travail au moyen de git restore
.
Le point positif est que la commande que vous utilisez pour dĂ©terminer lâĂ©tat de ces deux zones vous rappelle comment rĂ©initialiser les modifications qui sây appliquent.
Par exemple, disons que vous avez modifié deux fichiers et que vous souhaitez les valider comme deux modifications distinctes, mais que vous avez accidentellement tapé git add *
et avez indexé les deux.
Comment dĂ©sindexer lâune de deux ?
la commande git status
vous le rappelle :
$ git add *
$ git status
Sur la branche master
Modifications qui seront validées :
(utilisez "git restore --staged <fichier>..." pour désindexer)
modifié : CONTRIBUTING.md
renommé : README.md -> README
Juste en dessous du texte âModifications qui seront validĂ©esâ, il nous indique dâutiliser git restore --staged <fichier>âŠâ
pour désindexer.
Utilisons ce conseil pour désindexer le fichier CONTRIBUTING.md
.
$ git restore --staged CONTRIBUTING.md
$ git status
Sur la branche master
Modifications qui seront validées :
(utilisez "git restore --staged <fichier>..." pour désindexer)
renommé : README.md -> README
Modifications qui ne seront pas validées :
(utilisez "git add/rm <fichier>..." pour mettre à jour ce qui sera validé)
(utilisez "git restore <fichier>..." pour annuler les modifications dans le répertoire de travail)
modifié : CONTRIBUTING.md
Le fichier CONTRIBUTING.md
est modifié mais une fois de plus non-indexé.
Réinitialiser un fichier modifié avec git restore
Que faire si vous vous apercevez que vous ne voulez pas garder les modifications du fichier CONTRIBUTING.md
 ?
Comment le modifier simplementâââle rĂ©initialiser Ă lâĂ©tat quâil avait lors de votre dernier commit (ou lors du clonage ou de toute maniĂšre oĂč il apparaissait dans le dĂ©pĂŽt) ?
Heureusement, git status
indique aussi comment faire.
Dans la sortie du dernier exemple, la zone non-indexée ressemblait à ceci :
Modifications qui ne seront pas validées :
(utilisez "git add/rm <fichier>..." pour mettre à jour ce qui sera validé)
(utilisez "git restore <fichier>..." pour annuler les modifications dans le répertoire de travail)
modifié : CONTRIBUTING.md
Cela vous indique assez explicitement comment laisser les modifications que vous avez faites. Faisons comme indiqué :
$ git restore CONTRIBUTING.md
$ git status
Sur la branche master
Modifications qui seront validées :
(utilisez "git restore --staged <fichier>..." pour désindexer)
renommé : README.md -> README
Important
|
Il faut bien comprendre que |