Jak zresetować zdalne repozytorium Git, aby usunąć wszystkie zatwierdzenia?

164

Jak mogę zresetować zdalne i lokalne repozytorium Git, aby usunąć wszystkie zatwierdzenia?

Chciałbym zacząć od nowa z obecnym Head jako początkowym zatwierdzeniem.

Priyank Bolia
źródło
Nie chcę wybierać ani robić niczego innego, chcę tylko usunąć wszystkie zmiany i zresetować repozytorium publiczne. Ponieważ jestem nowym użytkownikiem Git, wykonałem kilka błędnych zatwierdzeń. Usunięcie katalogu .GIT nie wchodzi w grę, ponieważ istnieje również repozytorium publiczne.
Priyank Bolia,
Możesz także użyć siły, więc usunięcie katalogu .git jest w rzeczywistości opcją.
Lilith River
2
tylko czepianie się, ale „rewizja” jest terminologią svn i nie ma większego sensu w historii w kształcie drzewa.
Tamás Szelei
2
@ TamásSzelei „Revision” jest całkowicie akceptowalnym synonimem „commit”. Jest używany zarówno w książce Pro Git (np. Tutaj ), jak i na stronach podręcznika man Git.
jub0bs

Odpowiedzi:

348

Całkowicie zresetowany?

  1. Usuń .gitkatalog lokalnie.

  2. Odtwórz repostorium git:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Wypchnij do zdalnego serwera, nadpisując. Pamiętaj, że robiąc to, zepsujesz wszystkich innych… lepiej bądź jedynym klientem.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    
Lilith River
źródło
1
ale zatwierdzenia zniknęły, a repozytorium zostało zresetowane. Czy możemy usunąć te poprzednie wiadomości również przed nazwami plików.
Priyank Bolia,
2
Usuń zdalne repozytorium bezpośrednio na GitHub i utwórz je ponownie.
Bombe,
1
Powinno być git push --force zamiast git push -force
William Notowidagdo
6
Jeśli nie chcesz zatwierdzać żadnych plików w swoim „Wstępnym zatwierdzeniu”, możesz po prostu nie dodawać żadnych plików i dodać --allow-emptyflagę na końcu git commit -m 'Initial commit'.
raf,
2
Używając Gita 2.3.2, musiałem używać, git push --force --set-upstream origin masterale cała reszta działała zgodnie z opisem
Sébastien Stormacq
6

Najpierw postępuj zgodnie z instrukcjami zawartymi w tym pytaniu, aby zgnieść wszystko do jednego zatwierdzenia. Następnie wykonaj wymuszone naciśnięcie pilota:

$ git push origin +master

I opcjonalnie usuń wszystkie inne gałęzie, zarówno lokalnie, jak i zdalnie:

$ git push origin :<branch>
$ git branch -d <branch>
R. Martinho Fernandes
źródło
0

Gdybym był tobą, zrobiłbym coś takiego:

Zanim cokolwiek zrobisz, zachowaj kopię (lepiej bezpiecznie niż przepraszam)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

Po wykonaniu tej czynności możesz usunąć inne gałęzie.

Wynik: Będziesz mieć gałąź z tylko 2 zatwierdzeniami.

Użyj, git log --onelineaby zobaczyć swoje zatwierdzenia w minimalistyczny sposób i znaleźć SHA-1 dla zatwierdzeń!

Kwnstantinos Nikoloutsos
źródło