Ausführen von Tests für alle Commits während einer Rebase

9

Ich habe einen Feature-Zweig mit vielen Commits.

%Vor%

Ich arbeite an feature , aber ein anderer Entwickler hat die Commits B und C erstellt. Jetzt möchte ich feature bei commit C neu erstellen, aber ich und / oder automatische Fehler während der Rebase eingeführt. Mein Projekt hat eine sehr gute Testabdeckung und ich kann die Tests mit ant rebuild test von der Konsole aus ausführen, und jetzt möchte ich, dass git mir sagt, welcher Commit der erste Commit ist, der meinen Test bricht, damit ich diesen Commit beheben kann. Wie kann ich das tun?

    
yankee 04.02.2014, 18:51
quelle

3 Antworten

16

Während Sie sich im Zweig feature befinden, führen Sie Folgendes aus:

%Vor%

Dies bewirkt, dass git bei Commit C erneut startet, Ihre Arbeit oben wiederholt und nach jedem Commit, das während der Wiedergabephase angewendet wird, Ihre Tests ausführt.

Hoffentlich hat deine Ameisen-Aufgabe einen Null-Exit-Code, wenn deine Tests fehlschlagen. In diesem Fall stoppt Git, sobald die Tests fehlschlagen. Sie sind sofort in der richtigen Position, um Ihr Commit zu ändern, damit die Tests wieder glücklich werden. Nachdem Sie die Änderung vorgenommen haben, führen Sie einfach git rebase --continue wie gewohnt aus und git überprüft weiterhin alle Ihre Commits.

    
yankee 04.02.2014, 18:51
quelle
2

Hinzufügen zum OP-Yankee ausgezeichnete Antwort , Git 2.5+ wird eine robustere git rebase --interactive --exec Erfahrung, vor allem im Falle einer fehlgeschlagen exec.

Siehe commit b12d3e9 [22. Mai 2015] und committe 1d968ca [22. Mai 2015] von Matthieu Moy ( moy ) .
(Zusammengeführt von Junio ​​C Hamano - gitster - in commit a6be52e , 1. Juni 2015)

  

Der Befehl ' exec ' sendet das aktuelle Commit an stopped-sha , das das ursprüngliche Commit (vor der Rebase) enthalten soll.
  Wenn ein ' exec ' Befehl fehlschlägt, wird das nächste ' git rebase --continue ' das aktuelle Commit als nächstes an den Post-Rewrite-Hook senden.

Die vollständige Dokumentation:

  

rebase -i : fix post-rewrite hook mit fehlgeschlagenem exec -Befehl

     

Wenn " git rebase " vor dem Abschluss des Rebases stoppt, wird dem Benutzer normalerweise die Möglichkeit gegeben, ein Commit zu bearbeiten (z. B. mit dem ' edit ').   Befehl).
  In solchen Fällen lässt ' git rebase ' den sha1 des Commits in "$state_dir"/stopped-sha umschreiben und der nachfolgende ' git rebase --continue ' ruft den post-rewrite Hook mit diesem sha1 als <old-sha1> Argument zum post-rewrite Hook auf .

     

Der Fall, dass " git rebase " wegen eines fehlgeschlagenen Befehls " exec " anhält, ist anders: Es gibt dem Benutzer die Möglichkeit, das Problem zu untersuchen oder zu beheben   Fehler, aber hört nicht auf zu sagen "Hier ist ein Commit zu bearbeiten, zu verwenden    --continue wenn du fertig bist ".
  Es gibt also keinen Grund, den post-rewrite Hook für 'exec' Befehle aufzurufen.
  Wenn der Benutzer das Commit neu geschrieben hat, wäre es mit ' git commit --amend ', das bereits post-rewrite hook genannt hat.

     

Fix das Verhalten zu:

     
  • Bei fehlgeschlagenem stopped-sha -Befehl ,
  • darf keine exec -Datei verbleiben   
  • und lehre ' git rebase --continue ', um record_in_rewritten if zu überspringen   Keine stopped-sha -Datei gefunden.
  •   
    
VonC 08.06.2015 16:44
quelle
2

Eingeführt in Git 2.9 , können Sie nun für jeden einen Befehl ausführen Übernehmen Sie die Option -x , ohne auch --interactive hinzufügen zu müssen.

Anstatt git rebase -i --exec "cmd1 && cmd2 && ..." auszuführen, können Sie jetzt git rebase -x "cmd1 && cmd2 && ..." ausführen.

    
mkobit 11.07.2016 15:24
quelle

Tags und Links