2011-08-13 10 views
31

Czy mogę usunąć historię moich zatwierdzeń Github? Nie chcę stracić wszystkich moich zobowiązań, tylko ostatnich 10, które zostały zepchnięte na github. Nie mogę się domyślić, jak to zrobić.Usunąć historię zatwierdzania Github

+4

Zobacz http://stackoverflow.com/questions/495345/git-removing-selected-commits-from-repository Zauważ, że robienie tego typu rzeczy jest złym pomysłem, jeśli inne osoby współpracują z tym samym repozytorium. Zazwyczaj lepiej jest przejść przez uderzenia w historię i po prostu iść naprzód. –

+0

Świetny link. Dziękuję Ci! –

Odpowiedz

62

Wystarczy wybrać skrót, który chcesz wrócić do i w klonie zrobić:

git reset --hard hash# 
git push -f origin branch 

gdzie branch to nazwa oddziału, który chcesz przesunąć. Voilà. Bądź ostrożny przy użyciu siły. Możesz skopiować swój katalog roboczy, dopóki go nie zaznajomisz.

+1

Pracował jak urok! Poza tym nie zdawałem sobie sprawy, że oddział oznaczał nazwę mojego oddziału: P –

+1

jak znaleźć hasz? –

+1

Używam Tig, aby przejrzeć historię haszu, aby znaleźć tę, do której chcę wrócić. Możesz także użyć gitk lub dziennika git lub innego narzędzia, takiego jak drzewo źródłowe. Istnieje wiele opcji sprawdzania historii i znajdowania haszu – matthewdaniel

5

Jeśli chcesz to zrobić, można użyć HEAD~10

git reset --hard HEAD~10 

git push -f origin master 

Nie zaleca się zrobić usunąć serwer popełnić historię, w szczególności: jeśli masz zespół ludzi pracujących nad tym repo.

Jeśli masz zespół ludzi pracujących nad tym, polecam wycofać się, dodając kolejne zatwierdzenie, które cofa twój kod, którego nie chcesz.

2

Załadowałem wszystkie z moich plików do mojego pierwszego projektu github, w tym niektóre pliki ustawień z tajnymi kluczami. Musiałem wrócić i usunąć wszystkie wersje, które zostały dołączone przed dodaniem pliku .gitignore i usunąć wszystkie pliki ustawień z pamięci podręcznej mojego projektu.

How I did this:

gedit ./.git/logs/HEAD

Znajdź 40-znakowy hash SHA 'nowej root', który chcesz usunąć wszystko przed. Skopiuj go do schowka i zamknij. (Możesz, ale nie musisz, użyć , domyślnego edytora tekstu dla Linuxa).

$> gedit ./.git/info/grafts

Wklej SHA tutaj. Przejdź do katalogu swojego projektu.

$> cd ../..

$> git filter-branch

Wymusza impuls do kapitana, w przeciwnym razie będzie to zablokować próbę usunięcia swojej historii.

$> git push --force -u origin master

Usuń plik grafts.

$> rm ./.git/info/grafts

Nevermind

Cóż, moja odpowiedź jest tylko połowa sukcesu. Moja aktywność publiczna RSS nadal ma linki do wszystkich różnic, które szczegółowo informacje, które chciałem usunąć. Najwyraźniej there is no way to delete this, ale prawdopodobnie powinieneś przeczytać Change your Password i zaktualizować wszelkie poufne dane, które przypadkowo zostały przesłane.

+1

Po prostu chciałem dodać do tego, ponieważ wpadłem na to dzisiaj ze względu na sytuację, w której ja sam stworzyłem niezwykłą sytuację. Ale jednym z rozwiązań, które możesz zrobić po wykonaniu kroku [Usuń wrażliwe dane] (http://help.github.com/remove-sensitive-data/), utwórz nowe repozytorium i przepchnij wszystkie swoje najnowsze czyszczenie, i usuń stare repozytorium. Powoduje to unieważnienie odsyłaczy do twoich starych oddziałów/diffów w kanale aktywności publicznej, a github rzuci 404, ponieważ repo już nie istnieje. –

0

Po zainstalowaniu Git można również kliknąć prawym przyciskiem myszy folder repozytorium - Git GUI Tutaj.

Wybierz Repozytorium - Wizualizuj całą historię gałęzi.

Kliknij prawym przyciskiem myszy żądane zatwierdzenie - Tutaj zresetuj historię oddziału głównego tutaj.

Teraz masz 3 opcje:

Git

Gdy wybrana, wybierz Plik - Odśwież.

Udało się to ustalić po wybraniu Przywróć przy zatwierdzeniu w GitHub Desktop, a następnie Przywróć ponownie, aby powrócić do oryginalnego kodu, a następnie po prostu chcieć oczyścić te przywracane pary przywracania.

Powiązane problemy