Ich möchte eine einzelne Commit zu Gerrit, ohne andere Commits in der gleichen Zweig zu beeinflussen. Leider habe ich keine Testinstanz von Gerrit zum Experimentieren.Gerrit Workflow - Push-Single-Commit zu Zweig Zweig
Szenario: Ich habe ein Thema Zweig zu dem Projekt beigetragen, das im Rückblick ist, und andere Entwickler haben Teile davon aktualisiert. Jetzt möchte ich Änderungen an ihren Updates vornehmen.
Um dies zu tun ziehe ich die Änderungen durch den anderen Entwickler in der Commit, die ich bearbeiten möchte, eine interaktive Rebase lokal, um meine eigenen Änderungen zu machen, dann zu Gerrit schieben, um sicherzustellen, dass die Change-Id immer noch die gleiche ist. Dies fügt dem Patchset eine neue Version der Datei zur Überprüfung hinzu.
Problem: Als ich versuchte, Gerrit ein einziges begehen zu drücken, die anderen Commits im Thema-Zweig wurden auch geschoben, Änderungen von anderen Entwicklern zu überschreiben. Hier
ist die Syntax I verwendet:
git push gerrit 3089c9f56542461dce738a9aa17bb743ed36e038:refs/publish/master/my-topic-branch
Ich nehme an, dass die anderen Commits im Thema-Zweig auch aufgrund von Abhängigkeiten von Gerrit erstellt geschoben wurden.
würde dieser Ansatz Arbeit statt, das Thema Zweig Titel Weglassen ?:
git push gerrit 3089c9f56542461dce738a9aa17bb743ed36e038:refs/publish/master
Ich habe versucht, diesen Ansatz erfolgreich vorher, auf die spezifische changeset drängen:
git push gerrit a95cc0dcd7a8fd3e70b1243aa466a96de08ae731:refs/changes/12345
Dies ist jedoch bei dem Versuch, wieder bekomme ich jetzt einen auspacken fehler:
error: unpack failed: error Missing tree 9172313b907b160d15e260d5f7d51689f467b858
In Verbindung stehende Frage: Wenn ich die Änderungen der anderen Entwickler von Gerrit ziehe, wie kann ich sicherstellen, dass ich alle Akten genommen habe, die im Zweig des Themas beigetragen werden? Wenn ich die oberste Änderung in Gerrit in der Zweigstelle auswähle und den Pull-Befehl verwende, der in der Web-UI angegeben ist, scheint es, dass einige der Dateien in der Zweigstelle lokal aktualisiert werden, aber nicht alle. Muss ich jedes einzelne Commit im Zweig topic durchlaufen und den entsprechenden Pull-Befehl ausgeben?
Vielleicht habe ich nicht richtig verstehe Ihre Frage. Du sagtest, du "hast ihre Änderungen bereits (oder commits) gezogen und sie interaktiv referenziert" ... in dem Problem, das du erwähnst "wurden auch andere Commits im Themenzweig gepusht" ... Da diese Änderungen bereits vorhanden sind ... wieso du machst dir Sorgen? Oder meinst du, deine anderen Änderungen wurden vorangetrieben? – Vikram
Das Problem ist, dass, wenn ich die Änderungen von diesem bestimmten Commit ziehen, die die einzige ist, die ich bearbeiten möchte, nicht alle meine lokalen Dateien, die Teil dieses Zweigzweigs sind, aktualisiert werden. Siehe den Abschnitt "Verwandte Fragen". Wenn ich also das geänderte Commit drücke und die anderen Commits im Zweig themed ebenfalls gedrückt werden, sind sie oft älter als die aktuellen auf Gerrit und überschreiben Änderungen, die von anderen Devs gemacht wurden. – Lemmy
Betreff "Related Question": Um sicherzustellen, dass Sie alle Dateien, die von einem Zweig zum Thema beigetragen haben, übernommen haben, beginnen Sie mit dem allerersten "Patchset 1" oder einem "Patchset n", wenn Sie sicher sind, dass Sie alle benötigten Dateien haben. Führen Sie 'git pull --rebase refs/changes/#/#/patch #' aus, beginnend mit dem nächsten Patch bis zum letzten Patchset. Nachdem Sie alle Patchsets rebasiert haben, ist es wichtig, Commits zu quetschen. seltsamerweise kann 'git status' keine lokal liegenden commits anzeigen. –
Vikram