Eu tenho um projeto que tem uma longa história. Eu quero mostrar o primeiro commit no git.
Como eu faço isso?
Eu tenho um projeto que tem uma longa história. Eu quero mostrar o primeiro commit no git.
Como eu faço isso?
Respostas:
git rev-list --max-parents=0 HEAD
(a partir do comentário de tiho . Como Chris Johnsen observa , --max-parentsfoi introduzido depois que esta resposta foi publicada.)
Tecnicamente, pode haver mais de uma confirmação raiz. Isso acontece quando várias histórias independentes anteriormente são mescladas. É comum quando um projeto é integrado por meio de uma mesclagem de subárvore .
O git.gitrepositório possui seis commits raiz no gráfico de histórico (um para o commit inicial do Linus, gitk , algumas ferramentas inicialmente separadas, git-gui , gitweb e git-p4 ). Nesse caso, sabemos que e83c516é provavelmente o que mais interessa. É o commit mais antigo e o commit raiz.
Não é tão simples no caso geral.
Imagine que o libfoo está em desenvolvimento há algum tempo e mantém sua história em um repositório Git ( libfoo.git). Independentemente, o projeto “bar” também está em desenvolvimento (in bar.git), mas não por muito tempo, libfoo (o commit com a data mais antiga em libfoo.gittem uma data que precede o commit com a data mais antiga em bar.git). Em algum momento, os desenvolvedores do "bar" decidem incorporar o libfoo em seu projeto usando uma mesclagem de subárvore. Antes dessa mesclagem, poderia ter sido trivial determinar o "primeiro" commit bar.git(provavelmente havia apenas um commit raiz). Após a mesclagem, no entanto, existem vários commit root e o commit root mais antigo vem da história do libfoo, não "bar".
Você pode encontrar todos os commits raiz do histórico do DAG desta maneira:
git rev-list --max-parents=0 HEAD
Para o registro, se --max-parentsnão estivesse disponível, isso também funcionaria:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Se você tiver tags úteis, git name-revpoderá fornecer uma visão geral rápida do histórico:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin
Use isso com frequência? Difícil de lembrar? Adicione um alias do git para acesso rápido
git config --global alias.first "rev-list --max-parents=0 HEAD"
Agora você pode simplesmente fazer
git first
git rev-list --max-parents=0 HEADque fará o mesmo e é um pouco mais simples.
Eu achei aquilo:
git log --reverse
mostra confirmações desde o início.
git log --reverse -5torna ignorar o --reversepor algum motivo
Você pode simplesmente reverter o seu log e encabeçá-lo para o primeiro resultado.
git log --pretty=oneline --reverse | head -1
git log --reverseinverte o histórico, então você deve usar em head -1vez de tail -1obter o primeiro commit.
-nbandeira quando --reversefor dada.
git log $(git log --pretty=format:%H|tail -1)
git log $(git log --reverse --pretty=format:%H|head -1)
git log --format="%h" | tail -1fornece o hash de confirmação (ou seja 0dd89fb), que você pode alimentar em outros comandos, fazendo algo como
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD para ver todos os commits no último dia.
git log -1.