Ich habe eine Änderung an einem Open Source-Projekt auf Github eingereicht und von einem der Mitglieder des Kernteams Kommentare zur Codeüberprüfung erhalten.
Ich möchte den Code unter Berücksichtigung der Überprüfungskommentare aktualisieren und erneut einreichen. Was ist der beste Workflow dafür? Aufgrund meiner begrenzten Kenntnisse in Git / Github konnte ich Folgendes tun:
Aktualisieren Sie den Code als neues Commit und fügen Sie meiner Pull-Anforderung sowohl das anfängliche als auch das aktualisierte Commit hinzu.
Irgendwie (??) das alte Commit aus meinem Repository zurücksetzen und ein einzelnes neues Commit erstellen, das alles enthält, und dann eine Pull-Anfrage dafür auslösen?
git commit
hat eine Änderungsfunktion, aber ich habe gehört, dass Sie sie nicht verwenden sollten, nachdem Sie das Commit außerhalb Ihres lokalen Repositorys verschoben haben? In diesem Fall habe ich die Änderung auf meinem lokalen PC vorgenommen und in meinen Github-Zweig des Projekts verschoben. Wäre es in Ordnung, "ändern" zu verwenden?Etwas anderes?
Es scheint, als wäre Option 2/3 nett, da das Open Source-Projekt nur ein Commit in seiner Geschichte haben würde, das alles implementieren würde, aber ich bin mir nicht sicher, wie ich das machen soll.
Hinweis: Ich weiß nicht, ob sich dies auf die Antwort auswirkt oder nicht, aber ich habe die Änderungen nicht in einem separaten Zweig vorgenommen, sondern nur ein Commit über dem Master durchgeführt
quelle
master
ist auch ein Zweig, also technisch ist es egal :)So aktualisieren Sie eine Pull-Anforderung
Um eine Pull-Anfrage (Punkt 1) zu aktualisieren, müssen Sie nur denselben Zweig auschecken, aus dem die Pull-Anfrage stammt, und erneut darauf pushen:
Optional - Commit-Verlauf bereinigen
Möglicherweise werden Sie aufgefordert, Ihre Commits zusammenzufassen, damit der Repository-Verlauf sauber ist, oder Sie möchten zwischengeschaltete Commits entfernen, die von "der Nachricht" in Ihrer Pull-Anfrage ablenken (Punkt 2). Zum Beispiel, wenn Ihr Commit-Verlauf folgendermaßen aussieht:
Es ist eine gute Idee, Dinge zusammenzudrücken, damit sie als ein einziges Commit erscheinen:
Daraufhin werden Sie aufgefordert, auszuwählen, wie der Verlauf Ihrer Pull-Anforderung neu geschrieben werden soll. In Ihrem Editor wird Folgendes angezeigt:
Für jedes Commit, das Sie Teil des vorherigen Commits sein möchten, ändern Sie die Auswahl in Squash:
Und schließen Sie Ihren Editor. Git schreibt dann den Verlauf neu und fordert Sie auf, eine Festschreibungsnachricht für das eine kombinierte Festschreiben bereitzustellen. Wenn Sie dies entsprechend ändern, wird Ihr Commit-Verlauf nun präzise:
Schieben Sie das an Ihre Gabel:
und Ihre Pull-Anfrage enthält ein einzelnes Commit, das alle Änderungen enthält, die zuvor in mehrere Commits aufgeteilt wurden.
Das Ändern der Geschichte in öffentlichen Repos ist eine schlechte Sache
Das Umschreiben des Verlaufs und die Verwendung
git push -f
in einem Zweig, den möglicherweise bereits jemand anderes geklont hat, ist eine schlechte Sache. Dies führt dazu, dass der Verlauf des Repositorys und der der Kasse voneinander abweichen.Um jedoch die Änderung Sie die Geschichte Ihrer Gabel Änderung zu korrigieren vorschlägt , um in ein Repository integriert werden - ist eine gute Sache. Als solche haben Sie keine Bedenken, "Lärm" aus Ihren Pull-Anfragen zu quetschen.
Ein Hinweis zu Zweigen
Oben zeige ich, dass die Pull-Anfrage aus dem
master
Zweig Ihrer Gabel stammt. Daran ist nicht unbedingt etwas auszusetzen, aber es entstehen bestimmte Einschränkungen, z. B. wenn dies Ihre Standardtechnik ist, kann nur ein PR pro Repository geöffnet werden . Es ist jedoch eine bessere Idee, für jede einzelne Änderung, die Sie vorschlagen möchten, einen Zweig zu erstellen:quelle
git push -f
. Es gab nicht viele Kommentare, aber das hatte ich nicht erwartet.prune
entfernt nicht das freistehende begehen dann seine Geschichte noch Kommentare PRs werden entsprechen.