2011-08-07 10 views
11

Mam trochę śmieci w moim repozytorium git. Zostały one utworzone przez np. git gui podczas zmiany ostatniego zatwierdzenia ponownie i przypadkowego utworzenia dodatkowych zatwierdzeń.Jak usunąć niepotrzebne poprawki git?

Teraz mam kilka zobowiązań leżących wokół bez przypisanego HEAD (odłączony, nie jest częścią żadnej gałęzi).

Jak chcę uporządkować, moje pytanie brzmi: Jak mogę usunąć te zatwierdzenia (patrz F, G i H)? Czy odbywa się to za pomocą rebase lub przywrócić lub zresetować? Lub używając innego narzędzia? Na które zobowiązanie muszę siedzieć, aby to zrobić?

A -- B -- C -- D -- E [master] 
     \-- F -- G 
      \-- H 

Dzięki

Christian

+0

możliwe duplikat [listingu i usuwanie Git zobowiązuje się, że są pod nr gałąź (zwisająca?)] (http: // stackoverflow .pl/questions/3765234/listing-and-delete-git-commits-that-is-under-no-branch-dangling) – hunse

Odpowiedz

17

Spróbuj tego:

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

To niczego nie zmieniło. Przepraszamy –

+1

@Christian Wolf: Jeśli to nie zmieni niczego, to twoje zatwierdzenia F, G i H są określane przez * coś *. Być może masz na nich znak wskazujący? A może skrytka? Nie wiemy. –

+0

@Christian: Czy zweryfikowałeś używając 'git fsck --unreachable', że te zatwierdzenia faktycznie zwisają? Jeśli nie, to żadna ilość gc/prune nie usunie ich. Najpierw musisz usunąć odniesienia do nich. – cdhowie

0

Wykonaj poniżej:

git config gc.reflogexpireUnreachable = now 
git gc --prune=now 
git config gc.reflogexpireUnreachable = 3 days 
Powiązane problemy