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ć?

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

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

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
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.