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.



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
    

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>

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ń!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.