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
 120
Author: Jakub Narębski,
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ą.

 26
Author: Robert Munteanu,
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