Jak pchnąć nową gałąź bez historii

97

Mam repozytorium git z dwoma niepowiązanymi gałęziami, master i configs. Utworzyłem konfiguracje, wyczyściłem wszystkie pliki, a następnie umieściłem je tylko w plikach konfiguracyjnych. Teraz chcę wrzucić to do zdalnego repozytorium, ale jak to było nowe, puste gałąź (bez logów wszystkich moich zmian i starych wersji oryginalnej gałęzi).

Jak mogę oczyścić całą historię i ją przepchnąć?

Tomas Pruzina
źródło

Odpowiedzi:

158

Wyczyszczenie wszystkich plików nie usuwa historii. Musisz najpierw stworzyć gałąź, która nie ma historii i dodać swoje pliki konfiguracyjne. W dzisiejszych czasach dostępna git checkoutjest --orphanopcja, która tworzy gałąź bez historii. Oto informacje o --orphanopcji:

--orphan <nowa_ gałąź>

Utwórz nową gałąź osieroconą o nazwie <new_branch>, zaczynającą się od <start_point> i przełącz się do niej. Pierwsze zatwierdzenie dokonane w tej nowej gałęzi nie będzie miało rodziców i będzie korzeniem nowej historii całkowicie odłączonej od wszystkich innych gałęzi i zatwierdzeń.

Indeks i drzewo robocze są dostosowane tak, jakbyś wcześniej uruchomił "git checkout <start_point>". Pozwala to na rozpoczęcie nowej historii, która rejestruje zestaw ścieżek podobnych do <start_point> poprzez łatwe uruchomienie „git commit -a”, aby dokonać zatwierdzenia roota.

Może to być przydatne, gdy chcesz opublikować drzewo z zatwierdzenia bez ujawniania jego pełnej historii. Możesz to zrobić, aby opublikować gałąź projektu open source, której bieżące drzewo jest „czyste”, ale którego pełna historia zawiera zastrzeżone lub w inny sposób obciążone fragmenty kodu.

Jeśli chcesz rozpocząć odłączoną historię, która rejestruje zestaw ścieżek, który jest zupełnie inny niż ten z <start_point>, powinieneś wyczyścić indeks i drzewo robocze zaraz po utworzeniu gałęzi osieroconej, uruchamiając "git rm -rf. " z najwyższego poziomu drzewa roboczego. Następnie będziesz gotowy do przygotowania nowych plików, ponownego zapełnienia drzewa roboczego, skopiowania ich z innego miejsca, wypakowania tarballa itp.

Oto link do dokumentacji do kasy . Możesz też biegać git help checkout.

Po utworzeniu gałęzi bez historii, a następnie po przesłaniu jej na serwer, również nie będzie miała tej historii. FWIW, pomaga mi myśleć o git push„sprawieniu, aby zdalna gałąź wyglądała tak samo jak moja lokalna”. Więc jeśli masz historię i naciskasz, będzie miała historię. Jeśli tego nie zrobisz, wypchnięta gałąź nie.

John Szakmeister
źródło
39

Jak mogę oczyścić całą historię i ją przepchnąć?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Następnie możesz uruchomić swój

git push <remote-name> <branch-name>


por. ten jednowierszowy

Geremia
źródło
17

Musiałem to zrobić, aby wysłać freelancerowi jakiś kod bez udostępniania prywatnych informacji lub usuwania mojej historii.

W przypadku, gdy któryś z was używa SourceTree, tak mi się to udało. Daj mi znać, jeśli zrobiłem coś źle lub o czymś zapominam, ponieważ bardzo nie znam zarządzania kontrolą źródła.

  1. Poszedłem do przycisku terminala na drzewie źródłowym.
  2. Utworzyłem nową gałąź „osierocona” za pomocą polecenia: „git checkout --orphan clean-ver”, gdzie clean-ver to nazwa mojej gałęzi
  3. Zamknąłem terminal i zobaczyłem, że mój dziennik zatwierdzeń został wyczyszczony, ponieważ byłem w nowej gałęzi osieroconej. Przygotowałem cały mój kod źródłowy i zatwierdziłem zmiany.
  4. Skonfigurowałem repozytorium bitbucket w repozytorium> dodaj zdalne lub repozytorium> ustawienia repozytorium> dodaj.
  5. Zamknąłem to i kliknąłem przycisk
  6. Wybrałem moją nową gałąź „clean-ver”, która powiedziała ok.

Kiedy sprawdziłem Bitbucket, wydaje się, że to zadziałało i porzuciłem moją historię zatwierdzeń.

Mam nadzieję, że to komuś pomoże.

ThinkBonobo
źródło