Supprimer les anciens commits git

Je suis très novice et je me demandais si quelque chose comme cela était possible?

>git log --pretty=oneline --abbrev-commit 2f05aba Added new feature 3371cec Fixed screw up <-- I want to remove this daed25c Screw up <-- and remove this. e2b2a84 First. So it's like they never happend. 

Est-ce possible?

Ceci est possible avec git rebase . Essayez ce qui suit

 git rebase -i HEAD~4 

puis suivez les instructions interactives de votre éditeur. Dans la première étape, vous “écrasez” les commits. Ça devrait ressembler a quelque chose comme ca:

 pick 2f05aba ... will be preserved squash 3371cec ... will be squashed with daed25c squash daed25c ... will be squashed with e2b2a84 pick e2b2a84 .. will contain this and 3371cec and daed25c 

Dans la deuxième étape, vous pouvez éditer les messages de validation.

Si vous souhaitez vraiment les supprimer (les effacer de l’histoire, ne plus jamais les voir), vous pouvez

exécuter rebase:

 git rebase -i HEAD~4 

puis supprimez (ou commentez) les lignes correspondant aux commits à supprimer, comme ceci:

 pick 2f05aba ... #will be preserved #pick 3371cec ... #will be deleted #pick daed25c ... #will be deleted pick e2b2a84 ... #will be preserved 

Squash est utile lorsque vous souhaitez générer une liste de validations fusionnées sous un hachage unique, mais si vous souhaitez effectuer trois validations distinctes et avoir une sortie finale qui ressemble à une validation unique, je vous recommande de fixup

git rebase -i HEAD~4

 pick 2f05aba ... will be preserved fixup 3371cec ... will be merged with daed25c fixup daed25c ... will be merged with e2b2a84 pick e2b2a84 .. will include 3371cec and daed25c, but only the commit message of e2b2a84 

Vous pouvez trouver plus d’informations dans la liste de commandes de l’interface utilisateur de la rebase interactive.