wie Rebases und Commits in chronologischer Reihenfolge zu halten?

8

Ich möchte eine Verzweigung auf dem Master-Zweig referenzieren, aber so, dass alle Commits im Git-Log in chronologischer Reihenfolge erscheinen. Ist das möglich ohne git rebase --interactive und die Commits manuell neu anordnen?

Hintergrund: Ich verwende git, um die Marionettenkonfiguration einer Serverfarm zu verfolgen. Der Master-Zweig befindet sich immer in einem bekannten guten Zustand, so dass alle vorhandenen Server ihre Konfiguration vom Puppet-Master-Server abrufen können.

Jeder neue Server erhält seinen eigenen Zweig. Wenn ich also an der Konfiguration eines neuen Servers arbeite, z. B. einen Domänennamen ändern oder ein SSL-Zertifikat konfigurieren möchte, überprüfe ich seinen Zweig und setze alle Konfigurationen fest.

Nachdem die neue Konfiguration abgeschlossen ist, rebase ich die Änderungen auf den Master-Zweig:

%Vor%

Die neuen Commits stehen nun oben auf dem Protokoll, aber sie haben ihre ursprünglichen (vergangenen) Daten. Es sieht so aus:

%Vor%

Beachten Sie, wie die alten Zeitstempel der Zweig-Commits oben im Protokoll angezeigt werden, anstatt im Protokoll entsprechend ihren Commit-Daten weiter unten zusammengeführt zu werden. Ich muss ein weiteres git rebase --interactive ausführen, um die Commits neu anzuordnen, so dass meine Protokolldatei alle Commits in chronologischer Reihenfolge zeigt.

    
nn4l 18.07.2015, 14:34
quelle

2 Antworten

3

Ihre Frage ist etwas unterspezifiziert, weil git log die Ausgabe immer sortiert, aber nimmt Optionen, die es wie zum Sortieren sagen:

  

Bestellung bestätigen

     

Standardmäßig werden die Commits in umgekehrter chronologischer Reihenfolge angezeigt.

     

--date-order

     
    Zeigt keine Eltern an, bevor alle seine Kinder gezeigt werden, sondern zeigen Commits in der Zeitfolge des Commit-Timestamps.

--author-date-order

     
    Zeigt keine Eltern an, bevor alle seine Kinder angezeigt werden, ansonsten zeigen sie Commits in der Zeitstempelreihenfolge des Autors.

--topo-order

     
    Zeige keine Eltern, bevor alle ihre Kinder angezeigt werden, und vermeide es, Commits in mehreren Zeilen der Geschichte untereinander zu zeigen.

Ohne Optionen zeigt git log Commits in chronologischer Reihenfolge an, egal was passiert.

Ich denke Sie fragen stattdessen, wie Sie die Zeitstempel für die gestaffelten Commits ändern können . Standardmäßig werden bei der Umbuchung die Zeitstempel beibehalten.

Beachten Sie, dass es bei jedem Commit zwei Zeitstempel gibt: das Datum des Autors und das Datum des Committer.

Die Referenzdokument-Dokumentation beschreibt diese zwei Optionen:

>
  

--committer-date-is-author-date , --ignore-date

     
    Diese Flags werden an git am übergeben, um die Daten der gestaffelten Commits einfach zu ändern (siehe git-am (1)). Inkompatibel mit der Option --interactive .

In der git am -Dokumentation finden Sie eine genauere Beschreibung diese:

  

--committer-date-is-author-date

     
    Standardmäßig zeichnet der Befehl das Datum aus der E-Mail-Nachricht als das Datum des Festschreibungsautors auf und verwendet den Zeitpunkt der Erstellung der Festschreibung als das Datum des Festschreibungsereignisses. Dadurch kann der Benutzer über das Committer-Datum lügen, indem er denselben Wert wie das Autorendatum verwendet.

--ignore-date

     
    Standardmäßig zeichnet der Befehl das Datum aus der E-Mail-Nachricht als das Datum des Festschreibungsautors auf und verwendet den Zeitpunkt der Erstellung der Festschreibung als das Datum des Festschreibungsereignisses. Dies ermöglicht dem Benutzer, über das Datum des Autors zu lügen, indem er den gleichen Wert wie das Datum des Committer verwendet.

Sie können sowohl Autor- als auch Committer-Daten im fuller -Format mit git log anzeigen, zum Beispiel ( git log --format=fuller ).

Ich glaube, dass Sie --ignore-date verwenden wollen, was jede Neuvergabe zu einem "im Moment" passiert (das setzt voraus, dass ich Ihre Frage richtig interpretiere!).

    
torek 19.07.2015 00:33
quelle
1

Wenn Sie die ursprünglichen Daten beibehalten möchten, bleiben Sie bei der Neuausrichtung Ihrer Daten hängen.

Wenn Sie jedoch eine Pull-Anforderung erstellen und die Commits korrekt in einem Tool sortieren möchten, das nach Autordatum sortiert (TFS und GitHub tun beides), möchten Sie möglicherweise stattdessen die Daten ändern.

Windows: git rebase --force-rebase --exec "ping localhost -n 3" --exec "git commit --amend --date=now" master

Linux: git rebase --force-rebase --exec "sleep 2" --exec "git commit --amend --date=now" master

Beachten Sie, dass das Ausführen von git rebase --ignore-date master nicht funktioniert, da das Datum nur eine zweite Auflösung hat und verschiedene Commits dasselbe Datum erhalten und in einer nicht angegebenen Reihenfolge sortiert werden. Wenn Sie --exec und --ignore-date zusammen verwenden, wird der Parameter --ignore-date ignoriert. Weil es mit dem interaktiven Modus nicht kompatibel ist, welches --exec verwendet.

    
fLiXUs 10.10.2017 07:38
quelle

Tags und Links