Como fazer referência a cometer o inicial?
-
06-07-2019 - |
Pergunta
Eu tenho um script que precisa referenciar a inicial comprometer em um repositório. git tem a HEAD
referência especial, mas não tem a TAIL
correspondente. Eu não consigo encontrar nada na git help rev-parse
que parece me ajudar.
Aqui está o que eu gostaria de fazer:
git show TAIL
Aqui está uma opção que tenho:
git show `git log --reverse | if read a commit ; then echo $commit ; fi`
Isso é muito hacky e depende da saída do git log não mudar.
Agora eu só marcar o commit inicial e usar isso como meu refspec. No entanto, eu gostaria de lançar uma ferramenta geral, de modo que não é uma ótima opção.
Solução
Não use git-log para execução de scripts: utilização a git-rev-list, ou git-log com formato personalizado especificado ( "--format =
Não há problema adicional com a sua pergunta: pode existir mais de um como raiz CAUDA commit (parentless comprometer) em um repositório (mesmo se descontarmos ramos desconexas, como 'html', ' homem' e 'todo' em git.git repositório). Isso geralmente é resultado da junção projetos separados em um, ou usando mala subárvore do subprojeto desenvolvidos separadamente.
Para repositório exemplo git tem commits 6 raiz: git-gui, gitk (sub-fundida), gitweb (incorporada em, não mais desenvolvidos separadamente), ferramentas de correio git (fundiu muito cedo na história do projeto), e P4-rápido -export (talvez acidental). Isso não está contando raízes do 'html e 'homem' ramos, ramos de 'conveniência', que contém a documentação pré-gerado, e 'todo' ramo com lista de tarefas e scripts.
Se você tem git 1.7.4.2 ou mais recente, você pode usar a opção --max-parents
:
$ git rev-list --max-parents=0 HEAD
Caso contrário, você pode obter a lista de todos parentless (root) comete acessível a partir de ramificação atual usando:
$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Outras dicas
git rev-list HEAD | tail -n 1
é uma opção mais estável.