Stel dat ik een nieuwe branch my_experiment
heb gemaakt van master
en verschillende commits heb gemaakt voor my_experiment
. Als ik een git log
doe op my_experiment
, zie ik de commits die zijn gemaakt naar deze branch, maar ook de commits die zijn gemaakt naar master
vóór de my_experiments
branch is gemaakt.
Ik zou het erg handig vinden om de geschiedenis van alle commits naar de my_experiments
branch te zien totdat het de creatie van die branch bereikt – in feite een echte geschiedenis van alleen die branch. Anders is het mij niet duidelijk wanneer ik door het logboek kijk of de commits zich in de my_experiments
branch bevonden of niet.
Is er een manier om dit met Git te doen?
Antwoord 1, autoriteit 100%
Je kunt hiervoor een bereikgebruiken.
git log master..
Als je je my_experiment
branch hebt uitgecheckt. Dit vergelijkt waar master
is met HEAD
(de tip van my_experiment
).
Antwoord 2, autoriteit 6%
Opmerking: als je dat log beperkt tot de laatste n commit (laatste 3 commits bijvoorbeeld, git log -3), zorg er dan voor dat je een spatie plaatst tussen ‘n’ en je branch:
git log -3 master..
Vóór Git 2.1 (augustus 2014), zou deze fout: git log -3master..
je eigenlijk de laatste 3 commits van de huidige branch laten zien (hier my_experiment
) , waarbij de master
-limiet wordt genegeerd (wat betekent dat als my_experiment
slechts één commit bevat, er nog steeds 3 worden vermeld, waarvan er 2 van master
)
Zie commit e3fa568door Junio C Hamano (gitster
):
revisie: ontleden “git log -<count>
” zorgvuldiger
Deze verkeerd getypte opdrachtregel negeert eenvoudig “
master
” en toont uiteindelijk twee commits van de huidigeHEAD
:
$ git log -2master
omdat we “
2master
” invoeren inatoi()
zonder ervoor te zorgen dat de hele string wordt geparseerd als een geheel getal.Gebruik in plaats daarvan de
strtol_i()
-helpfunctie.
Antwoord 3, autoriteit 5%
Het git merge-base
commando kan worden gebruikt om een gemeenschappelijke voorouder te vinden. Dus als my_experiment nog niet is samengevoegd met master en my_experiment is gemaakt vanuit master, kun je:
git log --oneline `git merge-base my_experiment master`..my_experiment
Antwoord 4
Ik denk dat een optie voor jouw doeleinden git log --online --decorate
is. Dit laat je de aangevinkte commit weten, en de top commits voor elke branch die je in je verhaallijn hebt. Door dit te doen, heb je een mooi zicht op de structuur van je repo en de commits die aan een specifieke branch zijn gekoppeld. Ik denk dat het lezen van ditkan helpen.
Antwoord 5
U kunt alleen git log --oneline
. gebruiken
Antwoord 6
Ik weet dat het erg laat is voor deze… Maar hier is een (niet zo eenvoudige) oneliner om te krijgen wat je zocht:
git show-branch --all 2>/dev/null | grep -E "\[$(git branch | grep -E '^\*' | awk '{ printf $2 }')" | tail -n+2 | sed -E "s/^[^\[]*?\[/[/"
- Wij zijn vermelding commits met filiaalnaam en relatieve posities voor de daadwerkelijke branchestanden met
git show-branch
(het verzenden van de waarschuwingen naar/dev/null
). - Dan houden we alleen die met onze filiaalnaam in de beugel met
grep -E "\[$BRANCH_NAME"
. - waar daadwerkelijk
$BRANCH_NAME
wordt verkregen metgit branch | grep -E '^\*' | awk '{ printf $2 }'
(de tak met een ster, echode zonder die ster). - Van onze resultaten verwijderen we de redundante lijn aan het begin met
tail -n+2
. - En dan reinigen we de uitgang op door alles voorafgaand aan te verwijderen met
[$BRANCH_NAME]
metsed -E "s/^[^\[]*?\[/[/"
.