2011-05-27 3 views
11

je ne peux pas faire beaucoup de choses avec git et je veux supprimer un commettras de mon repo, parce que j'uploadé des choses mal.Git supprimer commit racine

J'utilisé git revert <the_commit> mais depuis le Commit est la racine et je ne peux pas l'enlever. fatale: ne peut pas revenir une racine commit

Que faire dans ce cas?

S'il vous plaît ne pas me donner des liens vers d'autres sujets ici, je les lis et je ne comprends pas quoi faire, j'ai besoin exemple de base sur la suppression de certains commettent.

Répondre

4

Pour enlever une racine commit, il vous suffit de supprimer toutes les branches (et étiquettes) à partir de laquelle il est joignable.

Cela peut être fait avec git branch -D branch-name. (Vous devrez d'abord vérifier une autre branche qui ne se réfère pas à cette validation racine, car je ne pense pas que vous pouvez supprimer la branche actuelle.)

Si vous souhaitez conserver d'autres validations sur cette branche et seulement supprimer la racine, git filter-branch est meilleure, voir la réponse de Greg.

18

Vous pouvez le faire en utilisant git filter-branch. Tout d'abord, identifiez l'ID de validation à la racine que vous souhaitez supprimer. Je vais représenter cela avec <the_commit>. Ensuite, exécutez git filter-branch en utilisant --parent-filter et une commande sed qui Cisailles ce parent:

git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD 

Voici une transcription d'un exemple que je viens d'essayer:

$ git log 
commit 7e1ba37b51fc2cc6289cf66367c9aedc74c664a8 
Author: Greg Hewgill <[email protected]> 
Date: Fri May 27 20:54:27 2011 +1200 

    three 

commit a8a410d2361824cbd518a48225e9402a691be93f 
Author: Greg Hewgill <[email protected]> 
Date: Fri May 27 20:54:17 2011 +1200 

    two 

commit 3171d512d98f6bc5f3c2469312930c0d32d3aa07 
Author: Greg Hewgill <[email protected]> 
Date: Fri May 27 20:54:00 2011 +1200 

    one 
$ git filter-branch --parent-filter "sed 's/-p 3171d512d98f6bc5f3c2469312930c0d32d3aa07//'" HEAD 
Rewrite 7e1ba37b51fc2cc6289cf66367c9aedc74c664a8 (3/3) 
Ref 'refs/heads/master' was rewritten 
$ git log 
commit 489ec1ee20e0dd20cd835ceebf157f628cd75a44 
Author: Greg Hewgill <[email protected]> 
Date: Fri May 27 20:54:27 2011 +1200 

    three 

commit a6f5ee410c9ea4fca6fbff265149b7fc555241eb 
Author: Greg Hewgill <[email protected]> 
Date: Fri May 27 20:54:17 2011 +1200 

    two 
$