Na seguinte árvore de exemplo:
A-B-C-D-E (master branch)
\
F-G-H (xxx branch)
Estou procurando por F - o primeiro commit no ramo xxx. Acho que é possível com:
git log xxx --not master
e o último commit listado deve ser F. É a solução correta ou talvez haja algumas desvantagens dela?
Eu sei que houve perguntas semelhantes sobre stackoverflow, mas ninguém propôs tal solução, e não tenho certeza se fiz isso direito.
Respostas:
Onde "branch" é o nome do seu branch específico. O ponto-ponto dá a você todos os commits que o branch tem e que o master não tem.
tail -1
retorna a última linha da saída anterior.fonte
master
e, contanto que seu branch não tenha sido excluído,git log <sha>..branch --oneline | tail -1
ainda deve fornecer os resultados que você está procurando.--reverse
para ler os logs de trás para frente com cores, etc.Você deve usar a
merge-base
funcionalidade projetada para resolver exatamente isso:fonte
fonte
Se o seu branch (antigo) mais uma vez mesclado de volta ao master não der o resultado esperado, usei o script python para encontrar o ID de commit inicial do branch.
git rev-list - conjunto de alterações primeiro-pai
--first-parent segue apenas o primeiro commit pai ao ver um commit de mesclagem.
Iterar changeset do comando acima até que o branch pai seja encontrado.
fonte
no entanto, isso só lhe dará o primeiro commit no branch xxx que não está no master, não o primeiro commit no branch xxx de todos os tempos. o último seria difícil se o branch xxx foi excluído e / ou recriado uma ou mais vezes. nesse caso, você pode tentar o seguinte:
fonte
head -n 1
vez detail -1
?tail -1
retorna o commit mais recente em vez do primeiro.git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1
fonte