En relisant la question, on dirait que vous voulez revenir sur les changements qui sont dans votre arbre de travail et non sur les changements qui ont été précédemment livrés, mais certaines des autres réponses donnent l'impression que ma lecture est peut-être erronée. Pouvez-vous clarifier ?
Si les modifications ne concernent que votre copie de travail, le moyen le plus simple est de mettre en scène les modifications que vous souhaitez conserver :
git add -i <file>
Ensuite, jetez les modifications que vous ne voulez pas conserver en vérifiant la version index :
git checkout -- <file>
Ensuite, déstockez les changements si vous ne voulez pas encore les stocker :
git reset -- <file>
Cette recette n'annule que les changements sélectionnés dans le fichier (ou les fichiers que vous spécifiez) et ne crée pas de commit temporaire qui doit ensuite être annulé.
Si vous voulez appliquer de manière sélective seulement certaines des modifications effectuées dans les commits précédents, vous pouvez d'abord réinitialiser un fichier à un état de commit précédent :
git reset <commit_before_first_unwanted_change> -- <file>
Ensuite, vous pouvez suivre la recette précédente de git add -i <file>
pour mettre en scène les changements que vous souhaitez conserver, git checkout -- <file>
pour jeter les changements non désirés et git reset -- <file>
pour "déstabiliser" les changements.