Jak przywrócić folder do określonego zatwierdzenia, tworząc poprawkę

97

Oto moja historia dla folderu „somefolder”

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

Chcę przywrócić jakiś folder z powrotem do zatwierdzenia „Błędy naprawione w jakimś folderze”.

Ponieważ drugie zatwierdzenie obejmowało zmiany poza jakimś folderem, nie chcę cofać tego zatwierdzenia.

Myślę, że najbezpieczniejszym sposobem byłoby utworzenie różnicy / poprawki między zatwierdzeniem e095 a 89cd, która dotyczy tylko jakiegoś folderu, a następnie zastosowanie tej poprawki. Jak mogę to zrobić?

hitfactory
źródło

Odpowiedzi:

156

Możesz użyć git checkout, aby zaktualizować repozytorium do określonego stanu.

git checkout e095 -- somefolder

Jeśli chodzi o twoje pytanie dotyczące generowania różnic, to też by działało. Po prostu wygeneruj różnicę, aby przejść z bieżącego stanu z powrotem do e095:

git diff 89cd..e095 -- somefolder
jamessan
źródło
30
nie usuwa to plików, które zostały dodane w tym zatwierdzeniu, git reset e095 -- some/folderzamiast tego użyj
shime
3
Od git 2.22 możesz użyć --no-overlayfor git checkout, aby śledzone pliki, które nie są w zatwierdzeniu, z których wypisujesz, zostaną usunięte.
Mariusz Pawelski
54

Możesz użyć git resetdo zresetowania indeksu, który obejmie również usunięcie plików, które zostały dodane w nowszych zatwierdzeniach ( git checkoutsamodzielnie tego nie robi):

git reset e095 -- somefolder

Jednak git resetnie aktualizuje kopii roboczej, a --hardopcja nie działa z folderami. Następnie użyj, git checkoutaby kopia robocza była taka sama jak indeks:

git checkout -- somefolder

a jeśli chcesz usunąć wszystkie dodane pliki, musisz również zrobić:

git clean -fd somefolder
Matthew Buckett
źródło
ta odpowiedź działa dla mnie, gdy katalog zawiera nowe pliki.
Yahoho
2
Ta odpowiedź jest znacznie lepsza, jeśli naprawdę chcesz mieć w tym czasie czystą migawkę repozytorium.
dane księżniczki z
Rzeczywiście dużo lepiej!
Alexis Pautrot