2012-03-31 14 views
21

Mam repozytorium, w którym dokonałem zmiany, która powoduje scalanie piekła i chciałbym udawać, że nigdy nie istniało. Długa, skomplikowana historia polegająca na wstawianiu wcześniej istniejącego repo na to, które jest aktualizowane przez git-p4, ale wynik jest naprawdę, naprawdę chcę git udawać, że pewne zmiany nigdy nie istniały.Git: Czy istnieje odpowiednik taśmy hg?

Gdyby to był Mercurial, jestem prawie pewien, że mogę naprawić mój problem z hg strip, ale nie mogę znaleźć takiego polecenia w Git.

Dziękujemy za wszelkie sugestie.

Odpowiedz

26

Istnieje więcej niż jedno polecenie, które należy wykonać. Pierwszym, o którym wspominali inni, jest git reset. Będziemy chcieli, aby znaleźć changeset tylko przed jeden chcesz się pozbyć, i używać

git reset --hard <changeset> 

to zmieni obecnego szefa oddziału (i indeksu) do punktu, w tym changeset, ale "zły" zestaw zmian to nadal obecny. Nie zostanie uwzględnione, jeśli zostanie naciśnięty przycisk, ale jeśli zostanie sklonowane w lokalnym repozytorium, nadal będzie można odwoływać się do komend log i kasowania.

Zakładając, nie istnieją żadne inne odniesienia do niej (np późniejsze rewizje, tagi, etc ...) można następnie oczyścić go z:

git gc --prune=now 

Znalazłem poleceń dzięki http://help.github.com/remove-sensitive-data/, który również wspomina to (tak jak w przypadku hg strip), jeśli pchnąłeś ten "zły" zestaw zmian do zdalnej lokalizacji, nie może usunąć go zwykłymi poleceniami git, ale musisz wykonać dodatkowe czynności, aby usunąć i ponownie utworzyć repozytorium na serwerze i wyczyścić wszelkie strony z pamięci podręcznej.

2

Spróbuj przeczytać dokumentację dla git reset. Nie znam się dobrze na Mercurialu, ale jeśli dobrze zrozumiem this document,pozwoli ci zrobić to samo - czyli zresetować twoje repozytorium z powrotem do poprzedniego punktu w jego historii.

This document omawia szczegółowo polecenie reset, a this one krótko omawia różne opcje poprawiania błędów.

4

As larsks said, git reset --hard może pomóc powrócić do historii chciałeś:

  1. Znajdź poprawną wartość sha chcesz powrócić do korzystania git log.
  2. Uruchom git reset --hard sha, aby powrócić.