Jak odwołać się do początkowego commita?
Mam skrypt, który musi odwoływać się do początkowego commita w repozytorium. git posiada specjalne odniesienie HEAD
, ale nie posiada odpowiedniego TAIL
. Nie mogę znaleźć w git help rev-parse
niczego, co mogłoby mi pomóc.
Oto co chciałbym zrobić:
git show TAIL
Mam jedną opcję:
git show `git log --reverse | if read a commit ; then echo $commit ; fi`
To dość trudne i zależy od tego, czy wynik Git log się nie zmieni.
W tej chwili po prostu oznaczam początkowy commit i używam go jako refspec. Jednak chciałbym aby zwolnić ogólne narzędzie, więc nie jest to świetna opcja.
2 answers
Nie używaj git-log do tworzenia skryptów: użyj git-rev-list lub git-log z podanym niestandardowym formatem (opcja" --format=
Istnieje dodatkowy problem z twoim pytaniem: może istnieć więcej niż jeden taki commit korzeniowy (parentless commit) w repozytorium (nawet jeśli dyskontujemy rozłączone gałęzie, takie jak 'html', 'man' i 'todo' w git.repozytorium git). Jest to zwykle wynikiem łączenia oddzielnych projektów w jeden, lub za pomocą łączenia poddtree oddzielnie opracowano na podstawie materiału źródłowego.
Na przykład repozytorium git ma 6 commitów root: git-gui, gitk( subtree-merged), gitweb (scalone, nie rozwijane oddzielnie), Git mail tools (scalone bardzo wcześnie w historii projektu) i P4-fast-export (być może przypadkowe). Nie licząc korzeni gałęzi 'html i 'man', gałęzi "convenience" zawierających wstępnie wygenerowaną dokumentację oraz gałęzi 'todo' z listą TODO i skryptami.
Możesz pobrać listę wszystkich commitów bez parentless (root) dostępne z bieżącej gałęzi za pomocą:
$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Jeśli masz git 1.7.4.2 lub nowszy, możesz użyć nowej opcji --max-parents
:
$ git rev-list --max-parents=0 HEAD
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-16 20:58:48
git rev-list HEAD | tail -n 1
jest bardziej stabilną opcją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-17 12:54:12