Jakiś czas temu dodałem informacje (pliki), które muszą być prywatne. Usunięcie z projektu nie jest problemem, ale muszę też usunąć go z git
historii.
Używam Git i Github (konto prywatne).
Uwaga: W tym wątku jest coś podobnego, ale tutaj jest stary plik, który został dodany do gałęzi funkcji, ta gałąź została połączona z gałęzią rozwojową i ostatecznie połączona z główną, ponieważ wprowadzono wiele zmian. Więc to nie to samo i potrzebna jest zmiana historii i ukrycie tych plików dla zachowania prywatności.
git rebase
wtedygit push -f
filter-branch
Metoda opisana w sugerowanej duplikatu będzie robić to, co chcesz.git filter-branch
Odpowiedzi:
Znalazłem tę odpowiedź i pomogło:
Znalazłem go tutaj https://myopswork.com/how-remove-files-completely-from-git-repository-history-47ed3e0c4c35
źródło
.env
. Szybkie i rzeczowe rozwiązanie.<previous_hash>..HEAD
i zaoszczędź trochę czasu.git push --force
Jeśli niedawno zatwierdziłeś ten plik lub jeśli plik ten zmienił się w jednym lub dwóch zatwierdzeniach, to sugerowałbym użycie
rebase
icherrypick
usunięcie tego konkretnego zatwierdzenia.W przeciwnym razie musiałbyś przepisać całą historię.
Kiedy jesteś zadowolony ze zmian i upewniłeś się, że wszystko wydaje się w porządku, musisz zaktualizować wszystkie zdalne oddziały -
Uwaga: - To złożona operacja i musisz być świadomy tego, co robisz. Najpierw spróbuj zrobić to w repozytorium demonstracyjnym, aby zobaczyć, jak to działa. Musisz również poinformować o tym innych programistów, aby w międzyczasie nie wprowadzali żadnych zmian.
źródło
--all
. Teraz mówi, że wszystko jest aktualne za każdym razem, gdy ponownie uruchomię push z oboma argumentami. Plik nie jest usuwany z innych gałęzi. Co mam teraz zrobić?--tree-filter
raczej użycie , niż--index-filter
odpowiedź @ PetroFranko?usuń plik i przepisz historię z zatwierdzenia wykonanego z usuniętym plikiem (spowoduje to utworzenie nowego skrótu zatwierdzenia z zatwierdzonego pliku):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all
teraz wymuś repozytorium:
git push origin --force --all
teraz powiedz swoim współpracownikom
rebase
.źródło
Użycie pakietu bfg repo-cleaner jest kolejną realną alternatywą dla
git-filter-branch
. Podobno jest też szybszy ...źródło
.gitignore
pliku i nie zapomnij zatwierdzić pliku :-)Możesz użyć tej strony: http://gtiignore.io, aby wygenerować
.gitignore
dla siebie i dodać wymaganą ścieżkę do swoich plików binarnych / folderówPo dodaniu pliku do
.gitignore
programu BFG można usunąć „stary” plik binarny.How to remove big files from the repository
Możesz użyć
git filter-branch
lub BFG. https://rtyley.github.io/bfg-repo-cleaner/Przykłady (z oficjalnej strony)
źródło
Przeczytałem ten artykuł na GitHubie , który doprowadził mnie do następującego polecenia (podobnego do zaakceptowanej odpowiedzi, ale nieco solidniejszego):
źródło
git-repo-filter
git
zaleca użycie git-filter-repo (gdygit filter-branch
polecenie jest wykonywane). Istnieje długa lista powodów, dla których jest lepsza niż jakiekolwiek inne alternatywy ( https://github.com/newren/git-filter-repo#why-filter-repo-instead-of-other-alternatives ), moje doświadczenie jest takie to jest bardzo proste i bardzo szybkie.To polecenie usuwa plik ze wszystkich zatwierdzeń we wszystkich gałęziach:
git filter-repo --path <path to the file or directory> --invert-paths
Można określić wiele ścieżek, używając wielu
--path
parametrów. Szczegółową dokumentację można znaleźć tutaj: https://www.mankier.com/1/git-filter-repoźródło