11
votes

Comment supprimer des engagements gits inutiles?

J'ai des ordures comme des ordures dans ma déposition git. Celles-ci ont été créées par ex. l'interface graphique de git lors de la modification des derniers contrats de commission et de créer accidentellement des commits supplémentaires.

Maintenant, j'ai des commits qui se trouvent avec aucune tête assignée (détachée, ne faisant partie d'aucune branche).

Comme je le veux Ranger, ma question est la suivante: comment puis-je supprimer ces engagements (voir f, g et h)? Est-ce fait-ce à l'aide de Rebase ou de revenir ou de réinitialiser? Ou en utilisant un autre outil? Sur quel commettre dois-je m'asseoir pour le faire? xxx

merci

chrétien

git

3 Réponses :


16
votes

Essayez ceci:

git reflog expire --expire=now
git gc --prune=now


7 commentaires

Cela n'a rien changé. Désolé


@Christian Wolf: Si cela n'a rien changé, votre commits F, G et H sont référés par quelque chose . Vous avez peut-être une balise pointant sur eux? Ou une cachette? Nous ne savons pas.


@Christian: Avez-vous vérifié en utilisant git fsck --untreducable que ces engagements sont en fait pendants? Sinon, aucune quantité de gc / pruneau ne les retirera. Vous devez d'abord supprimer la (les) référence (s).


Je dois être fatigué hier. Aujourd'hui, après avoir dormi et en réalisation, les commits n'existent pas.


J'utilisais Gitk et je pensais avoir le même problème, ils n'étaient pas élagués. Essayez de recharger (Shift-F5) VS Update (F5).


Je devais utiliser le drapeau - tout avec reflog pour tailler mes commits: git reflog expire --expire = maintenant --all --all . En outre, j'ai trouvé la commande git fsck utile pour déterminer ce qui se passait; Spécifiquement, Git FSCK --UnRéchable --No-Reflog Affiche les engagements qui sont inaccessibles ou accessibles uniquement à partir du reflèvement.


Je devais utiliser git gc -prune = maintenant - herggressive



3
votes

faire ci-dessous:

git config gc.reflogexpireUnreachable now
git gc --prune=now
git config --unset gc.reflogexpireUnreachable


1 commentaires

Merci! - Votre solution a supprimé "les engagements recyclables", la réponse acceptée n'a pas.



0
votes
git reflog expire --expire=now --all
git gc --prune=now
Note: I know this is written in the comments of the most voted answer, but I keep finding myself coming back to this question and not immediately finding the answer that works.
The --all option is the only thing that is missing from the most voted answer, but is what makes it work for me.

0 commentaires