2015-10-16 14 views
7

Ich versuche, Commits (ausgenommen Merge-Commits) anzuzeigen, die in den letzten 24 Stunden zum Zweig master hinzugefügt wurden. Derzeit i für das diesen Befehl bin mit:Protokoll-Commits, die in den letzten 24 Stunden zum Master hinzugefügt wurden

git log --format=format:%s --no-merges --since='24 hours ago' 

Dies hat jedoch ein Problem: Wenn ein Commit älter als 24 Stunden, aber in den letzten 24 Stunden in den master Zweig zusammengeführt, wird der Befehl nicht Liste den Commit . Ist es möglich, Commits anzuzeigen, die dem Zweig master in den letzten 24 Stunden hinzugefügt wurden, und keine Commits, die in den letzten 24 Stunden erstellt wurden?

Bitte beachten Sie, dass ich dies in einem sauberen CI-Arbeitsbereich ausführen, so kann git reflog kann mir nicht helfen.

Vielen Dank im Voraus!

+0

Statt "--no-merges", könnte '--first-parent' besser funktionieren? – ams

+0

@ams, die nur die Merge-Commits anzeigen würde. Ich brauche die nicht verschmolzenen Commits, die in den letzten 24 Stunden zum 'Master'-Zweig hinzugefügt wurden. – WonderCsabo

Antwort

3

Ich denke, rev-list ist was du willst.

Try this:

git rev-list --no-merges '^<24-hour-old-commit>' HEAD 

, dass alle Nicht-fusionieren Commits Liste sollte die HEAD von begehen erreichbar sind, aber nicht erreichbar von von <24-hour-old-commit> zu begehen.

Zum Beispiel in dieser Revision Graph, es wird die obere Falliste verpflichtet, aber nicht niedrigen Falles:

a - b - c - 24h - H - i - J - K - HEAD 
    \    /
     D - E - F - G ' 

Verpflichtet H, J, K und HEAD sind alle jünger als 24 Stunden alt. Commit i ist auch jünger, wird aber weggelassen, da es sich um ein Merge-Commit handelt. Commits , E, F und G können ein beliebiges Alter haben, wurden aber nur innerhalb der letzten 24 Stunden zusammengeführt, so dass sie auch aufgeführt sind. geben

git rev-list -n1 --before="24 hours" --first-parent HEAD 

Das heißt,“:


Im obigen Befehl --max-age oder --since Optionen wird das gleiche Problem haben, wie Sie mit git log haben, aber sie verwendet werden können <24-hour-old-commit> für Sie zu finden nur 1 Commit-ID, die mindestens 24 Stunden alt sein muss und sich auf dem aktuellen Zweig befindet ".

Dass sie alle zusammen:

git rev-list --no-merges HEAD \ 
      --not $(git rev-list -n1 --before="24 hours" --first-parent HEAD) 

(Anmerkung: --not abcdef eine andere Art und Weise ist ^abcdef außer zu sagen, dass es zu alle folgenden Argumente gelten, damit die Optionen Nachbestellung.)

Die Standardausgabe von rev-list ist nur rohe Überarbeitungen, aber Sie können es mehr wie git log mit der Option --pretty machen. --pretty=short ist ungefähr das gleiche wie Sie es gewohnt sind.

+0

aber es wäre nicht schwer zu skripten - derzeit habe ich keine ahnung wie das ist, wo ich auch steckte. Würde es Ihnen etwas ausmachen, zu erarbeiten?Ich denke, das ist eine knifflige Aufgabe, wir müssen das erste Commit finden, das zu "Master" in den letzten 24 Stunden hinzugefügt wurde ... – WonderCsabo

+0

Ich habe gerade nachgesehen. Bald bearbeiten. :-) – ams

+0

Info hinzugefügt, bitte testen und melden Sie zurück. :-) – ams

Verwandte Themen