Wenn ich an einem Feature-Zweig arbeite, möchte ich die Commits im Zweig mithilfe einer interaktiven Rebase bereinigen, bevor meine Arbeit überprüft und in den Hauptzweig integriert wird.
Während der Entwicklung der Funktion möchte ich meine Zwischenarbeit als Sicherungsmaßnahme in das Remote-Repository übertragen. Das heißt, wenn meine Festplatte abstürzt, möchte ich nicht, dass mein gesamter Feature-Zweig verloren geht.
Dies führt jedoch dazu, dass ich git push --force
nach einer Rebase häufig eine Verbindung zum Remote-Repository herstellen muss, eine Aktion, die im Allgemeinen verpönt ist. Oder wie die verlinkte Github-Seite sagt:
Da das Ändern Ihres Festschreibungsverlaufs für alle anderen Benutzer des Repositorys schwierig sein kann, wird es als schlechte Praxis angesehen, Festschreibungen neu zu begründen, wenn Sie bereits in ein Repository verschoben haben.
Gibt es eine (allgemein akzeptierte) Richtlinie, die diesen Konflikt löst?
Warum ist dies kein Duplikat von Ist der Git "Goldene Regel des Wiederherstellens" so wichtig?
Meine Frage hier fordert eine Richtlinie zur Lösung des Konflikts zwischen dem Wunsch, Ihre Arbeit im Remote-Repository zu sichern und der Neugründung Ihrer Arbeit , während die andere Frage versucht, den Konflikt zu leugnen, und fragt, warum manche Leute glauben, dass der Konflikt überhaupt besteht. und fragt daher, warum "es wichtig ist", keine Force Rebases voranzutreiben?
Antworten:
Die Schlüsselfrage, die Sie sich stellen sollten:
Wenn Sie Ihren Remote-Feature-Zweig nach dem Zusammenführen mit dem Master löschen, verlieren Sie bereits den Verlauf. Angenommen, Sie quetschen den Zweig, bevor Sie seine Zusammenführung / PR durchführen, verlieren Sie diesen Verlauf. In diesem Fall können Sie nur Github als Backup verwenden.
Die Situation , wo Sie wollen würde , die Geschichte und nicht die Kraft Push zu halten ist , wenn Ihr Fern Zweig persistierenden , nachdem sie zusammengefügt und nicht nur für einen vorübergehenden Zeitraum existieren.
Es hört sich so an, als würden mehrere Personen gleichzeitig auf diesen Zweig drängen. Dies bedeutet, dass Sie sich um die Historie in der Filiale kümmern.
Was Sie stattdessen für Ihre Zwischenarbeit tun könnten, ist eine Gabelung dieses Zweigs zu erstellen. Sie können darauf pushen und dann alle Ihre Commits vor dem Zusammenführen zu einem einzigen Commit zusammenfassen. Wenn Sie sie also in Ihrem Feature-Zweig zusammenführen, haben Sie nur 1 Commit (mit dem neu basierten Verlauf Ihres gesamten Zweigs).
quelle
featurebranch-local
) einen anderen lokalen Zweig erstellen und dann einen aktiven Entwickler für diesen Zweig mit so vielen Commits ausführen, wie Sie möchten. Wenn Sie zusammenführen möchten, quetschen Sie diese Commits und führen Sie sie dann in das Feature ein. Im Grunde genommen mache ich nur Entwickler in einem tatsächlichen temporären Zweig und quetsche / verschmelze dann mit deiner Funktion.develop-feature
Zweig arbeiten. Natürlich ist die Privatsphäre rein konventionell und wird durch nichts erzwungen, kann aber Teil einer Richtlinie sein, insbesondere wenn hierfür bestimmte Namenskonventionen für Zweige eingeführt werden. (Vielleicht bin ich gerade zu ängstlich, vielleicht auch nicht :) Die Kombination mit--force-with-lease
kann nicht schaden, sollte aber nicht als verlässlich angesehen werden, wie in meinem anderen Beitrag ausgeführt.Ich liste hier einige Möglichkeiten auf, die mir in den Sinn kommen.
Basieren Sie immer auf einem neuen Zweig
Wenn Sie einen unordentlichen Zweig haben
some-feature
, stützen Sie ihn auf einen neuen Zweig. Z.BDann
some-feature-rebase
überprüft und integriert haben.Problem: Ein großer Nachteil hierbei ist, dass Sie genau genommen für jede Rebase einen neuen Zweig benötigen. (Sie können mehrere Rebases haben, wenn Sie beispielsweise nach einer Codeüberprüfung Änderungen vornehmen.)
Verwenden
git push --force-with-lease
Ich habe gerade etwas über die
git push --force-with-lease
Alternativegit push --force
gelernt , zu derProblem : Dies scheint sich direkt gegenüber der Situation zu verbessern, in der wir nur verwenden
--force
, hat aber immer noch einige Einschränkungen, insbesondere wenn ich agit fetch
anstelle von a machegit pull
, wodurch unsere lokalen Upstream-Zweige aktualisiert werden und der--force-with-lease
Eindruck entsteht, dass auf der Fernbedienung keine nicht zusammengeführten Änderungen vorgenommen wurden Ast.quelle