Mam projekt, który ma długą historię. Chcę pokazać pierwsze zatwierdzenie na git.
Jak mam to zrobic?
Mam projekt, który ma długą historię. Chcę pokazać pierwsze zatwierdzenie na git.
Jak mam to zrobic?
Odpowiedzi:
git rev-list --max-parents=0 HEAD
(z komentarza tiho . Jak zauważa Chris Johnsen , --max-parentszostał wprowadzony po opublikowaniu tej odpowiedzi).
Technicznie może być więcej niż jeden główny zatwierdzenie. Dzieje się tak, gdy wiele wcześniej niezależnych historii jest połączonych ze sobą. Jest to powszechne, gdy projekt jest zintegrowany poprzez scalanie poddrzewa .
git.gitRepozytorium ma sześć zobowiązuje korzenie w jej wykresie historii (po jednym dla Linus na początkowy popełnienia, gitk niektórzy początkowo osobne narzędzia, git-gui , gitweb i git-p4 ). W tym przypadku wiemy, że e83c516prawdopodobnie tym jesteśmy zainteresowani. Jest to zarówno pierwszy zatwierdzenie, jak i zatwierdzenie główne.
W ogólnym przypadku nie jest to takie proste.
Wyobraź sobie, że libfoo rozwija się od jakiegoś czasu i zachowuje swoją historię w repozytorium Git ( libfoo.git). Niezależnie, projekt „bar” również był w fazie rozwoju (in bar.git), ale nie na tak długo libfoo (zatwierdzenie z najwcześniejszą datą w libfoo.gitma datę, która poprzedza zatwierdzenie z najwcześniejszą datą w bar.git). W pewnym momencie twórcy „bar” decydują się na włączenie libfoo do swojego projektu za pomocą scalania poddrzewa. Przed tym połączeniem może być trywialne określenie „pierwszego” zatwierdzenia w bar.git(prawdopodobnie był tylko jeden główny zatwierdzenie). Jednak po scaleniu istnieje wiele zatwierdzeń roota, a najwcześniejsze zatwierdzenie roota pochodzi z historii libfoo, nie „bar”.
Możesz znaleźć wszystkie główne zatwierdzenia historii DAG w następujący sposób:
git rev-list --max-parents=0 HEAD
Dla przypomnienia, jeśli --max-parentsnie były dostępne, działa to również:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Jeśli masz przydatne tagi, git name-revmożesz dać szybki przegląd historii:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin
Używasz tego często? Trudno zapamiętać? Dodaj alias git, aby uzyskać szybki dostęp
git config --global alias.first "rev-list --max-parents=0 HEAD"
Teraz możesz po prostu zrobić
git first
git rev-list --max-parents=0 HEADże zrobi to samo i jest nieco prostsze.
Znalazłem to:
git log --reverse
pokazuje zatwierdzenia od początku.
git log --reverse -5, z --reversejakiegoś powodu to ignoruje
Możesz po prostu odwrócić swój dziennik i po prostu przejść do pierwszego wyniku.
git log --pretty=oneline --reverse | head -1
git log --reverseodwraca historię, więc musisz użyć head -1zamiast tail -1pierwszego zatwierdzenia.
-nflagi, gdy --reversejest podana.
git log $(git log --pretty=format:%H|tail -1)
git log $(git log --reverse --pretty=format:%H|head -1)
git log --format="%h" | tail -1daje hash zatwierdzenia (tj. 0dd89fb), który możesz przekazać innym poleceniom, wykonując coś takiego
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD aby zobaczyć wszystkie zatwierdzenia z ostatniego dnia.
git log -1.