Vous pouvez utiliser git checkout -p
qui vous permet de choisir des morceaux individuels de la différence entre votre copie de travail et l'index à rétablir. De même, git add -p
vous permet de choisir les chasses à ajouter à l'index, et git reset -p
vous permet de choisir des chasses individuelles dans la différence entre l'index et HEAD pour revenir en arrière dans l'index.
$ git checkout -p file/to/partially/revert
# or ...
$ git checkout -p .
Si vous souhaitez faire un snapshot de votre dépôt git au préalable pour préserver ces changements avant de les annuler, j'aime le faire :
$ git stash; git stash apply
Si vous l'utilisez souvent, vous pourriez vouloir l'aliaser :
[alias]
checkpoint = !git stash; git stash apply
Rétablir des hunks ou des lignes individuelles peut être encore plus facile si vous utilisez un bon mode d'édition ou un plugin, qui peut fournir un support pour sélectionner directement des lignes à rétablir, comme -p
peut parfois être un peu maladroit à utiliser. J'utilise Magit un mode Emacs qui est très utile pour travailler avec Git. Dans Magit, vous pouvez exécuter magit-status
trouvez les diffs pour les changements que vous voulez inverser, sélectionnez les lignes que vous voulez inverser (ou mettez simplement le curseur sur les hunks que vous voulez inverser si vous voulez inverser un hunk à la fois au lieu d'une ligne à la fois), et appuyez sur k
pour rétablir ces lignes spécifiques. Je recommande vivement Magit si vous utilisez Emacs.