suppose que nous avons un référentiel et 5 commits: p>
Et maintenant je réalise les commits 4 et 5 sont une mauvaise idée. Je tiens à supprimer complètement toutes les modifications commises dans COMMIT 4 et 5. Comment le faire? P>
3 Réponses :
Il revient commis. Notez que Revert est un autre commit qui retarde les changements de COMTT_HASH, ne pas enlever les engagements donnés du référentiel. P> git revert commit_hash code> p>
Je créerais probablement une nouvelle succursale à partir de validation 3.
git checkout -b commit3
Si les commits 4 et 5 sont dans votre référentiel seulement et n'ont pas été poussés ou tirés par un autre référentiel, vous pouvez simplement: p>
GIT RESET --HARD SHA1_HASH_OF_COMMIT_3 P> blockQuote>
Vous pouvez découvrir le hachage SHA1 d'un commit en utilisant
Git Journal CODE> ou vous pouvez utiliser des techniques de nommage plus avancées, voirGit Aide Aide Rev-Pays Code> en particulier la section «Spécification de révisions». p>Utilisation de cette commande laissera les engagements 4 et 5 inaccessibles de la pointe de la branche. Les commits ne seront toutefois pas perdus car ces commits sont conservés dans le reflocation de la succursale. Vous pouvez utiliser
git reflog code> pour identifier un commit inaccessible. La restauration peut alors être effectuée avec un autreGIT RESET --HARD CODE>. Cette page ici décrit tout assez bien. p>Il est recommandé de gérer
git gc code> sur une base régulière; Certaines commandes le font également pour vous automatiquement. Cela effectue essentiellement «ménage» sur le référentiel, telles que «Révisions de fichiers de compression (pour réduire l'espace disque et augmenter les performances) et éliminer les objets inaccessibles». Les objets inaccessibles sont éliminés du référentiel après (une valeur par défaut) 30 jours. Cela peut être modifié à l'aide de l'option de configurationgc.reflogexpireunreachable code>. P>
"Jusqu'à ce que vous exécutez git gc code>" est trompeur - il s'inquiète automatiquement et l'utilisateur n'a généralement pas besoin de l'exécuter. Le COMTT ne sera pas également considéré comme inaccessible tant que c'est sur le reflex, qui prennent 90 jours pour expirer. Même si vous supprimez la branche (et avec son reflocation), la valeur par défaut est uniquement pour élaborer des objets de plus de 30 jours. UPSHOT: Ça ne va pas bientôt disparaître.
@Jefromi je suis d'accord, c'est trompeur. Toutes mes excuses pour une réponse assez précipitée. J'ai mis à jour ma réponse avec un peu plus de détails.
J'irais avec revenir si vous avez poussé à un référentiel public. Sinon, aucune des autres options conviennent.