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:
cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push
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:
$ git remote add parent git@github.com:other-user/project.git
$ git fetch parent
$ git log --oneline parent/master..master
e4e32b8 add test case as per PR comments
eccaa56 code standard fixes as per PR comments
fb30112 correct typos and fatal error
58ae094 fixing problem
Es ist eine gute Idee, Dinge zusammenzudrücken, damit sie als ein einziges Commit erscheinen:
$ git rebase -i parent/master
Daraufhin werden Sie aufgefordert, auszuwählen, wie der Verlauf Ihrer Pull-Anforderung neu geschrieben werden soll. In Ihrem Editor wird Folgendes angezeigt:
pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments
Für jedes Commit, das Sie Teil des vorherigen Commits sein möchten, ändern Sie die Auswahl in Squash:
pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments
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:
$ git log --oneline parent/master..master
9de3202 fixing actual problem
Schieben Sie das an Ihre Gabel:
$ git push -f
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 978 bytes, done.
Total 11 (delta 9), reused 7 (delta 6)
To git@github.com:me/my-fork.git
f1238d0..9de3202 HEAD -> master
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:
$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets
master
ist auch ein Zweig, also technisch ist es egal :)