Comment faire pour supprimer dur orphelin s'engager dans git?
J'ai de validation qui ne sont pas sur n'importe quelle branche que je voudrais supprimer.
Je ne veux pas rebase eux, j'ai vraiment envie de les supprimer, et de perdre toutes les informations liées à ces commettre.
Est une commande pour le faire ?
Jusqu'à présent, j'ai essayé de rebase interactif comme beaucoup l'ont suggéré, mais il suffit de déplacer commettre, il ne les supprime pas. J'ai aussi essayé d'utiliser le reflog supprimer, mais je ne peux pas comprendre comment passer d'un spécifique de commettre l'Id de la commande.
Voici l'arbre de travail:
o [master] Commit #6
|
o Commit #5
|
| o Commit #4
|/
o Commit #3
|
o Commit #2
|
o Commit #1
Je veux supprimer physiquement le commit #4.
- Pourriez-vous élaborer sur "déplacer s'engager autour de"?
- ainsi, la validation existent toujours, mais est liée à quelque chose d'autre.. C'est quoi un rebase faire: changer le commit parent... non ?
- Dans le rebase interactif, vous devez supprimer la ligne avec le commit que vous voulez supprimer. Le retour de la validation est tout simplement la création d'un nouveau commit l'application de l'inverse de la diff de celui spécifié. Cela ajoute juste un autre commit, vous devrez supprimer. Essayez le rebase et de supprimer complètement la ligne.
- Riehman, hum. Avez-vous des commandes spécifiques à faire ce que me dit (vraiment supprimer physiquement un commit) ? Considérez que je n'ai qu'un commitId...
- Lorsque vous exécutez le rebase interactif et qu'il ouvre votre éditeur de texte, il suffit de retirer de la validation de la ligne que vous souhaitez supprimer. git va réappliquer toutes les autres s'engage et que l'on ne sera plus accessible par la branche courante. La livraison sera ensuite abattus par git collecte des ordures au bout d'un mois.
- Sudo git rebase -i origin/master, je ne trouve pas le commit #4. sudo git rebase -i cb497092 (le commitId #4), je ne vois que le commit #5 et 6. Je suis perdu.
- J'ai eu exactement le même problème que posée ici (c'est pourquoi je trouve cette question), mais il s'avère être un problème avec gitk de bien actualiser lui-même après un rebase. Le redémarrage de l'application "résout" le problème.
Vous devez vous connecter pour publier un commentaire.
Si la validation n'est pas référencé par quoi que ce soit, il sera supprimé avec git collecte des ordures, dans le temps.
Si vous voulez forcer la main avant de l', utilisez
git gc --prune=now --aggressive
git reset --hard shaOfLastGoodCommit
. Qui va enlever le mauvais commit(s) et déplacer la pointe de votre branche sur le dernier commit.git log --graph --decorate --all --oneline
spectacle? Sont tout décorateurs sur la même ligne que celle engager? Tout s'engage au-dessus d'elle?git fsck
afficher le commettre? Pourquoi pensez-vous qu'il n'est pas supprimé?git help reflog
.Pour supprimer un commit, vous avez juste besoin de s'assurer qu'il ne fait plus partie de n'importe quelle branche. C'est, pour chaque branche dans votre référentiel, assurez-vous que le mauvais commit ne fait pas partie de l'enfant à parent de la chaîne de commits la définition de la branche. Si vous trouvez une telle branche, soit la supprimer, ou de modifier son histoire de manière à ce qu'il ne comprend plus le mal commis.
Une fois que cela est vrai, le mauvais commit va être récupérées par la suite.