Wie entferne ich Commits ohne Änderungssatz mit git filter-branch?
Ich habe meinen Git-Verlauf umgeschrieben mit:
git filter-branch --tree-filter 'rm -r -f my_folder' -f HEAD
Das hat gut geklappt, aber jetzt habe ich viele Commits mit leeren Änderungssätzen. Ich möchte diese Commits entfernen. Am besten in msysgit.
Rebasing ist keine Option, da ich über 4000 Commits habe und die Hälfte davon entfernt werden muss.
git
git-filter-branch
Paul Pladijs
quelle
quelle
--index-filter
mitgit rm -r --ignore-unmatch --cached my_folder
viel schneller als--tree-filter
da es nicht jede Revision überprüfen muss. Es arbeitet vollständig mit dem Index.--tree-filter ...
) und jetzt nur die verbleibenden leeren Commits loswerden möchten, hat dies meinen Speck gerettet:git filter-branch --prune-empty
(nur denfilter-branch
Befehl ohne 'Filter') - wie unter stackoverflow.com/questions/28313664 zu finden /… - Dies ist nützlich, wenn Jefromis Antwort unten ( stackoverflow.com/questions/5324799/… ) den Fehlerbericht erstelltFound nothing to rewrite
Antworten:
Fügen Sie einfach die
--prune-empty
Option hinzu:git filter-branch --tree-filter 'rm -rf my_folder' --prune-empty -f HEAD
(Und natürlich, wenn Sie andere Refs haben, möchten Sie vielleicht alles neu schreiben,
-- --all
anstatt nurHEAD
.)Beachten Sie, dass dies nicht kompatibel ist mit
--commit-filter
; In diesem Fall hat Charles Bailey Ihre Antwort .quelle
Wenn Sie nur nach der Dokumentation suchen
filter-branch
, sollten Sie in der Lage sein, Folgendes zu tun:git filter-branch --commit-filter 'git_commit_non_empty_tree "$@"' HEAD
quelle