2011-03-16 8 views
72

Jak usunąć zatwierdzenia, które nie mają zestawu zmian za pomocą filtru Git?Git - usuwa zatwierdzenia z pustym zestawem zmian za pomocą gałęzi filtru

przepisał mi moją historię git przy użyciu:

git filter-branch --tree-filter 'rm -r -f my_folder' -f HEAD 

to działało dobrze, ale teraz mam dużo zatwierdzeń z pustymi Zestawienia zmian. Chciałbym usunąć te zatwierdzenia. Najlepiej w msysgit.

Przekazywanie nie jest tak naprawdę opcją, ponieważ mam ponad 4000 zatwierdzeń, a połowa z nich musi zostać usunięta.

+4

Dla przyszłych odwiedzających, '--index-filter' z' git rm -r --ignore-unmatch --cached my_folder' jest znacznie szybszy niż '--tree-filter', ponieważ nie musi go sprawdzać każda zmiana. Działa całkowicie na indeksie. – vmrob

+3

A jeśli już wykonałeś pracę ('--tree-filter ...'), a teraz po prostu chcesz pozbyć się zalegających pustych commitów, to uratowałeś mój bekon: 'git filter-branch --prune-empty' (tylko polecenie 'filter-branch' bez * żadnego 'filtra') - jak w http://stackoverflow.com/questions/28313664/remove-empty-commits-in-git#28313729 - jest to użyteczne kiedy odpowiedź Jefromi poniżej (http://stackoverflow.com/questions/5324799/git-remove-commits-with-empty-changeset-using-filter-branch#5326065) generuje raport o błędzie "Nie znaleziono nic do przepisania" –

Odpowiedz

65

Wystarczy dodać opcję --prune-empty:

git filter-branch --tree-filter 'rm -rf my_folder' --prune-empty -f HEAD 

(I oczywiście, jeśli masz inne refs, może chcesz przepisać wszystko za pomocą -- --all zamiast tylko.)

Pamiętaj, że to nie jest jest kompatybilny z --commit-filter; w tym przypadku, Charles Bailey has your answer.

46

Tylko patrząc w dokumentacji filter-branch, powinieneś być w stanie to zrobić:

git filter-branch --commit-filter 'git_commit_non_empty_tree "[email protected]"' HEAD 
+0

To działa też, jeśli używam do tego flagi -f –

+4

+1. Bardzo przydatne, jeśli przekonwertowałeś repozytorium svn, które zwykle generuje wiele pustych zatwierdzeń. – Fabio

+0

To polecenie nie usuwa wszystkich pustych zatwierdzeń w moim przypadku, ale niestety nie wiem dlaczego. Każdy inny pomysł? –

Powiązane problemy