A może tylko wszystkie zatwierdzenia, które miały miejsce między dwiema datami? W SVN możesz zrobić coś takiego
svn diff -r{date}:{date}
zrobić to! Nie mogę znaleźć odpowiednika tego w Gicie.
W szczególności zajmuję się napisaniem skryptu do codziennego wysyłania e-maili z całym kodem popełnionym tego dnia i przez kogo.
The command is kept primarily for historical reasons; fingers of many people who learned Git long before git log was invented by reading Linux kernel mailing list are trained to type it.
Tak więc docs zachęca do używaniagit log
zamiastgit whatchanged
; to ostatnie polecenie używa również opcji --no-merge git log, więc wyświetlają te same wyniki.git whatchanged
jest przestarzałe od najnowszej wersji 2.21.0. Wszystkogit whatchanged
to można osiągnąćgit log
i jest to zachowane tylko ze względów historycznych. Zobacz szczegóły git-scm.com/docs/git-whatchanged/2.21.0Poprzednie sugestie mają pewne wady. Zasadniczo szukałem czegoś równoważnego
cvs diff -D"1 day ago" -D"2010-02-29 11:11"
. Zbierając coraz więcej informacji, znalazłem rozwiązanie.Rzeczy, których próbowałem:
git whatchanged --since="1 day ago" -p
od tutajAle to daje różnicę dla każdego zatwierdzenia, nawet jeśli w jednym pliku jest wiele zatwierdzeń. Wiem, że „randka” to trochę luźna koncepcja w gicie , pomyślałem, że musi być jakiś sposób, aby to zrobić.
git diff 'master@{1 day ago}..master
ostrzegawarning: Log for 'master' only goes back to Tue, 16 Mar 2010 14:17:32 +0100.
i nie pokazuje wszystkich różnic.git format-patch --since=yesterday --stdout
nic za mnie nie daje.revs=$(git log --pretty="format:%H" --since="1 day ago");git diff $(echo "$revs"|tail -n1) $(echo "$revs"|head -n1)
działa jakoś, ale wydaje się skomplikowany i nie ogranicza się do aktualnej branży.Wreszcie:
git diff $(git rev-list -n1 --before="1 day ago" master)
wydaje się działać i domyślny sposób na robienie podobnych rzeczy , chociaż bardziej skomplikowane niż myślałem.Co zabawne, git-cvsserver nie obsługuje "cvs diff -D" (bez tego jest to gdzieś udokumentowane).
źródło
git rev-list
, co znacznie przyczyniło się do rozwiązania bardzo podobnego problemu, który widziałem.git diff 'master@{1 day ago}..master
środki składniowe „sprawdzić się reflog i dowiedzieć się, gdzie oddziałmaster
wykorzystywane do punktu w lokalnym repozytorium1 day ago
”. W szczególności nie będzie używać rzeczywistej historii zatwierdzania bieżącej gałęzimaster
. Bardzo rzadko jest to rzecz, której naprawdę chcesz.„Date” to trochę luźna koncepcja w gicie. Zatwierdzenie będzie miało datę autora, która może znajdować się w przeszłości, zanim ktoś faktycznie pobierze / zatwierdzi zatwierdzenie do swojego repozytorium, również zatwierdzenie może zostać zmienione i zaktualizowane, aby znajdowało się na szczycie pozornie nowszego zatwierdzenia.
Zatwierdzenie ma również datę zatwierdzenia, która jest aktualizowana, jeśli zatwierdzenie zostanie zmienione lub w jakikolwiek sposób zmienione. Te zatwierdzenia są bardziej prawdopodobne w jakiejś kolejności chronologicznej, ale nadal jesteś na łasce osoby zatwierdzającej, która ma właściwy czas ustawiony na swoim komputerze, a mimo to niezmodyfikowane zatwierdzenie może siedzieć w gałęzi funkcji w zdalnym repozytorium przez czas nieokreślony scalane z główną gałęzią centralnego repozytorium.
To, co jest prawdopodobnie najbardziej przydatne do twoich celów, to data reflogu w określonym repozytorium. Jeśli masz włączone reflogs dla poszczególnych gałęzi (zobacz
git config core.logAllRefUpdates
), możesz użyćref@{date}
składni, aby odnieść się do miejsca, w którym gałąź była w określonym czasie.Na przykład
Możesz także użyć „rozmytych” opisów, takich jak:
Te polecenia pokażą wszystkie zatwierdzenia, które „pojawiły się” w danej gałęzi repozytorium, niezależnie od tego, jak są „stare” według ich autora i dat wprowadzenia.
Zwróć uwagę, że reflog dla poszczególnych gałęzi jest specyficzny dla repozytorium, więc jeśli uruchamiasz polecenie dziennika na klonie i nie ściągasz przez (powiedzmy) miesiąc, a następnie pobierz wszystkie zmiany z ostatniego miesiąca naraz wtedy wszystkie zmiany z ostatniego miesiąca pojawią się w
@{1 hour ago}..@{now}
zakresie. Jeśli jesteś w stanie uruchomić polecenie log w „centralnym” repozytorium, do którego ludzie naciskają, może to zrobić, co chcesz.źródło
@{time spec}
składnia zawsze odnosi się do twojego lokalnego reflogu . Nie odnosi się do aktualnej historii zatwierdzeń (DAG). Jeśli nie rozumiesz różnicy, nie używaj tej składni!lub
źródło
@{time spec}
składnia zawsze odnosi się do twojego lokalnego reflogu . Nie odnosi się do aktualnej historii zatwierdzeń (DAG). Jeśli nie rozumiesz różnicy, nie używaj tej składni!Być może
jest tym, czego chcesz (z opcją „--stdout” lub bez niej)?
źródło
Uważam, że ogólnym rozwiązaniem jest użycie:
Bez --first-parent, możesz otrzymać zatwierdzenie z gałęzi, która została później scalona,
a ref
ale nie została scalona w dniua date string
.Oto alternatywa użycia
--children
igrep
zamiast-n1
:Nie byłem zaznajomiony z tym
git whatchanged
przed przeczytaniem tego pytania i odpowiedzi, ale daje on bardzo różne wyniki, więc nie jestem pewien, co robi.źródło
Innym prostym sposobem na uzyskanie różnicy wszystkich zmian od określonej daty jest po prostu znalezienie pierwszego zatwierdzenia,
X
które miało miejsce tego dnia lub później, a następnie użycieMa to tę zaletę, że nie zależy od wpisów reflog w nowym klonie, w przeciwieństwie do
rozwiązania w
źródło
Aby obserwować zmiany plików Git od początku do chwili w Twoim oddziale, użyj następującej formuły:
Formuła :
Zwróć uwagę, że daty są w formacie RRRR-MM-DD :
Jeśli chcesz obserwować zmiany w określonym pliku w określonym przedziale czasu (obserwuj różnice w kodzie), po prostu przejdź do bieżącego pliku:
Przykład :
źródło
To bardziej zabawna odpowiedź, ponieważ prawdopodobnie istnieje lepszy sposób. Spowoduje to wyświetlenie wszystkich wartości skrótu zatwierdzania na dziś.
; ·)
źródło
Możesz także użyć git-format-patch do przygotowania łatek (różnic) i wysłania ich pocztą elektroniczną.
Użyj opcji [od] lub [zakres wersji], aby określić zakres zatwierdzeń.
źródło
Wrzucę sposób, w jaki to robię:
git log
dla daty podaje skróty zatwierdzeń dla bieżącej gałęzi. Następnie używam czegoś takiego,git diff 8fgdfg8..565k4l5
co daje mi właściwą różnicę agregowaną według plików. Mam nadzieję, że to pomoże, chociaż nie testowałem zbyt wieleźródło