2012-09-22 14 views
49

Mam repozytorium git z dwoma niepowiązanymi oddziałami, master i configs. Utworzone zostały konfiguracje, wyczyszczone wszystkie pliki, a następnie umieszczone tylko w plikach konfiguracyjnych. Teraz chcę przekazać to na zdalnym repo, ale jak to było nowe, puste oddziału (bez dzienników wszystkich moich zmian i starych wersji oryginalnego oddziału).Jak przesuwać nowy oddział bez historii

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

+3

To wygląda bardzo podobnie: http://stackoverflow.com/questions/1384325/in-git-is-there-a-simple-way-of-introducing-an-unrelated-branch-to -a-repozytorium – Mark

+0

@ Mark podziękowania, że ​​robi to, czego potrzebuję. – AoeAoe

Odpowiedz

100

Oczyszczenie wszystkich plików nie pozbywa się historii. Musisz najpierw utworzyć gałąź, która nie ma historii, a następnie dodać pliki konfiguracyjne. Obecnie git checkout ma opcję --orphan, która tworzy gałąź bez historii. Poniżej znajduje się informacja o możliwości --orphan:

--orphan < new_branch>

Utwórz nowy oddział sierota o imieniu < new_branch>, zaczęło się od < start_point> i włączyć do niego. Pierwsze zobowiązanie dokonane w tej nowej filii nie będzie miało rodziców i będzie korzeniem nowej historii całkowicie odłączonej od wszystkich innych gałęzi i zobowiązań.

Indeks i drzewo robocze są dostosowane tak, jakby poprzednio uruchomić "git checkout < start_point>". Dzięki temu możesz rozpocząć nową historię, która rejestruje zestaw ścieżek podobnych do < punkt_początkowy> przez łatwe uruchomienie "git commit -a", aby dokonać zatwierdzenia root.

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 o otwartym źródle, 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 uruchomić rozłączoną historię, która rejestruje zestaw ścieżek, który jest całkowicie inny niż < punkt_początkowy>, to powinieneś wyczyścić indeks i działające drzewo zaraz po utworzeniu gałęzi osieroconej, uruchamiając "git rm -rf. " z najwyższego poziomu roboczego drzewa. Później będziesz gotowy, aby przygotować nowe pliki, zasiedlać drzewa pracę, kopiując je z zewnątrz, wyodrębnianie archiwum itp

Oto link do dokumentacji checkout. Możesz również uruchomić git help checkout.

Po utworzeniu oddziału bez historii, to po wypchnięciu go na serwer również nie będzie mieć tej historii. FWIW, pomaga mi myśleć o git push jako "sprawić, by zdalna gałąź wyglądała tak samo jak moja lokalna". Więc jeśli masz historię i pchasz, to będzie miała historię. Jeśli tego nie zrobisz, wciśnięta gałąź nie będzie.

13

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

Jeśli ktoś z was korzysta z SourceTree, udało mi się to zrobić. Proszę dać mi znać, jeśli zrobiłem coś złego lub zapomniałem o czymś, ponieważ jestem bardzo obeznany z zarządzaniem kontrolą źródła.

  1. Poszedłem do przycisku terminalu na drzewie źródłowym.
  2. stworzyłem nową „sierocy” oddział za pomocą polecenia: „git checkout --orphan czyszczenia-ver” clean-ver gdzie jest moja nazwa oddziału
  3. Zamknęłam terminal i zobaczyłem, że mój popełnić dziennika zdaje ponieważ byłem w nowej sierocińcu. Przygotowałem cały mój kod źródłowy i zatwierdziłem zmiany.
  4. Skonfiguruję moje 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", powiedział ok.

Kiedy sprawdziłem bitbucket, wydaje się, że wydawało się, że to zadziałało i odrzuciło moją historię commitów.

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

11

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

git checkout --orphan <name_you_choose_for_orphan_branch> 
git commit 

Następnie można uruchomić

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


por this one-liner

Powiązane problemy