Pracuję nad regresją w kodzie źródłowym. Chciałbym powiedzieć Gitowi: „sprawdź źródło na podstawie sparametryzowanej daty / godziny”. czy to możliwe?
Wprowadziłem także zmiany w moim obecnym widoku, których nie chcę stracić. Idealnie chciałbym przełączać się między bieżącym źródłem a niektórymi wersjami, które mnie interesują na podstawie poprzedniej daty.
git
git-checkout
Amir Afghani
źródło
źródło
git bisect good
punktu początkowego .tags
.Odpowiedzi:
Aby zachować bieżące zmiany
Możesz trzymać swoją pracę w ukryciu, bez angażowania się w nią
git stash
. Byś niż stosowaniegit stash pop
go odzyskać. Lub możesz (jak powiedział carleeto )git commit
do osobnego oddziału.Kasa według daty przy użyciu analizy składni
Możesz sprawdzić zatwierdzenie przed określoną datą, używając
rev-parse
następującego:Więcej informacji na temat dostępnych opcji można znaleźć w
git-rev-parse
.Jak zauważono w komentarzach, ta metoda używa refloga do znalezienia zatwierdzenia w twojej historii. Domyślnie wpisy te wygasają po 90 dniach . Chociaż składnia użycia reflogu jest mniej szczegółowa, możesz cofnąć się tylko o 90 dni.
Kasa według daty przy użyciu rev-list
Inną opcją, która nie korzysta z reflog, jest użycie,
rev-list
aby uzyskać zatwierdzenie w określonym momencie za pomocą:Zwróć uwagę na --first-parent, jeśli chcesz tylko swoją historię, a nie wersje wprowadzone przez scalenie. Tego zwykle chcesz.
źródło
git co 'master@{2 days ago}'
.git rev-list -n 1 --before="2009-07-27 13:37" master
$(...)
są podpowłoki .Rozwiązanie Andy'ego nie działa dla mnie. Tutaj znalazłem inny sposób:
Git: zamówienie według daty
źródło
error: unknown switch `n'
jakieś pomysły, jak to obejść?Wygląda na to, że potrzebujesz czegoś takiego: Git Checkout na podstawie daty
Innymi słowy, używasz
rev-list
do znalezienia zatwierdzenia, a następnie używasz kasy, aby go faktycznie pobrać.Jeśli nie chcesz stracić wprowadzonych zmian, najłatwiej byłoby utworzyć nowy oddział i zatwierdzić go w tym oddziale. Zawsze możesz przełączać się między gałęziami.
Edycja: link nie działa, więc oto polecenie:
źródło
git checkout branch@{date}
Przestaje więc działać po wylogowaniu, ale możesz użyćgit checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
.Dla tych, którzy wolą potok zamiast polecenia
źródło
W moim przypadku
-n 1
opcja nie działa. W systemie Windows stwierdziłem, że następująca sekwencja poleceń działa dobrze:Zwraca SHA odpowiedniego zatwierdzenia dla podanej daty, a następnie:
źródło
git rev-parse
Proponowany przez @Andy rozwiązanie działa dobrze jeżeli data jesteś zainteresowany jest popełnić data . Jeśli jednak chcesz dokonać transakcji na podstawie daty autora ,rev-parse
nie będzie działać, ponieważ nie oferuje opcji użycia tej daty do wyboru zatwierdzeń. Zamiast tego możesz użyć następujących.(Jeśli chcesz również określić czas wykorzystania
$1 >= "2016-04-12" && $2 >= "11:37"
w predykacie awk ).źródło
Idąc dalej z tą
rev-list
opcją, jeśli chcesz znaleźć najnowsze zatwierdzenie scalania z gałęzi master do gałęzi produkcyjnej (jako czysto hipotetyczny przykład):Musiałem znaleźć kod, który był na serwerach produkcyjnych na dany dzień. Znalazłem to dla mnie.
źródło
Jeśli chcesz mieć możliwość powrotu do dokładnej wersji repozytorium w momencie wykonywania kompilacji, najlepiej oznaczyć zatwierdzenie, z którego wykonujesz kompilację.
Inne odpowiedzi dostarczają techniki przywracania repozytorium do ostatniego zatwierdzenia w gałęzi od określonego czasu - ale nie zawsze mogą one wystarczyć. Na przykład, jeśli budujesz z gałęzi, a później usuwasz gałąź lub budujesz z gałęzi, która później jest ponownie bazowana, zatwierdzenie, z którego zbudowałeś, może stać się „nieosiągalne” w git z dowolnej gałęzi. Nieosiągalne obiekty w git mogą zostać ostatecznie usunięte po skompaktowaniu repozytorium.
Umieszczenie znacznika na zatwierdzeniu oznacza, że nigdy nie będzie ono nieosiągalne, bez względu na to, co zrobisz z gałęziami później (z wyjątkiem usuwania znacznika).
źródło
weź wydrukowany ciąg (na przykład XXXX) i wykonaj:
źródło