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:
Acredito git rev-list --max-parents=0 HEADque fará o mesmo e é um pouco mais simples.
tiho
3
@tiho: Sim, faz o mesmo e é mais simples; embora essa opção não tivesse sido "inventada" no momento desta pergunta / resposta.
precisa saber é o seguinte
Ocorre-me que a primeira cometer é mais de uma folha de cometer do que uma raiz comprometer
Tiwo
Acho que sua resposta deve ser a sua própria resposta e não apenas um comentário. Dessa forma, será mais proeminente e você receberá pontos muito merecidos.
Russell Silva
@RussellSilva Não me importo com pontos, mas acredito que é possível editar as respostas de outras pessoas, o que provavelmente seria melhor do que adicionar uma nova. Eu realmente não estou confortável fazendo isso me embora, não hesite em fazê-lo :)
git log -1
.Respostas:
Resposta curta
(a partir do comentário de tiho . Como Chris Johnsen observa ,
--max-parents
foi introduzido depois que esta resposta foi publicada.)Explicação
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.git
repositó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 quee83c516
é 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 (inbar.git
), mas não por muito tempo, libfoo (o commit com a data mais antiga emlibfoo.git
tem uma data que precede o commit com a data mais antiga embar.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" commitbar.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:
Para o registro, se
--max-parents
não estivesse disponível, isso também funcionaria:Se você tiver tags úteis,
git name-rev
poderá fornecer uma visão geral rápida do histórico:Bônus
Use isso com frequência? Difícil de lembrar? Adicione um alias do git para acesso rápido
Agora você pode simplesmente fazer
fonte
git rev-list --max-parents=0 HEAD
que fará o mesmo e é um pouco mais simples.Eu achei aquilo:
mostra confirmações desde o início.
fonte
git log --reverse -5
torna ignorar o--reverse
por algum motivoVocê pode simplesmente reverter o seu log e encabeçá-lo para o primeiro resultado.
fonte
git log --reverse
inverte o histórico, então você deve usar emhead -1
vez detail -1
obter o primeiro commit.-n
bandeira quando--reverse
for dada.fonte
git log $(git log --reverse --pretty=format:%H|head -1)
Não é a maneira mais bonita de fazer isso, eu acho:
Isso fornece um número para você
fonte
git log --format="%h" | tail -1
fornece o hash de confirmação (ou seja0dd89fb
), que você pode alimentar em outros comandos, fazendo algo comogit diff `git log --format="%h" --after="1 day"| tail -1`..HEAD
para ver todos os commits no último dia.fonte