Ich habe diese Situation:Wie entfernen Commits wie diese
B C D
/-----*-----*-----*
-*---*---*---*---*---* branch A
A1 A2 A3 A4 A5 A6
Commits B, C, D nicht an einem Zweig gehören. Wenn ich meine Phantasie git lg
habe, zeigt es keine Zweigbeschriftungen in der Nähe von ihnen (es tut für Master, Herkunft/Master, HEAD, Zweig Zweige usw.). Wenn ich sie auschecke, bewege ich mich in den Status "losgelöster Kopf" (das ist zu erwarten, weil ich sie nur mit sha1 auschecken kann). Wie entferne ich sie?
Dinge, die ich bisher versucht:
- Kasse D begehen und
git reset HEAD~3 --hard
, HEAD Zeiger bewegt sich auf A4 laufen, aber Commits sind immer noch hier. - Manuell ausgeführt
git reflog expire --expire=now --all
, gefolgt vongit gc --prune=now
, commits sind immer noch hier.
Was passiert und wie entferne ich diese Commits?
Edit: 39d9480 ist einer der problematischen Commits. Versuchte Experimentieren mit merge-base, habe diese Ausgabe:
git merge-base --is-ancestor 39d9480 master; echo $?
0
git merge-base --is-ancestor master 39d9480; echo $?
1
Ich sehe nicht, dass diese Verpflichtung beim Versuch, Rebase.
Wenn Sie den reflog Ablauf und gc getan haben, würden sie normalerweise an dieser Stelle weg, was andeutet, dass * etwas * sich immer noch auf sie bezieht (wie der 'Refs/Originals /' Namespace, den 'git filter-branch' hinterlässt). Womit erweitert sich dein 'git lg'-Alias? – torek
'git log --graph --oneline --decorate' – 0xCAFEBABE
Going zu überprüfen, Refs/Originale. – 0xCAFEBABE