Verwandte: Sollte jeder GIT das Projekt in einem funktionierenden Zustand belassen?
Angenommen, ich mache lokal die folgenden Commits:
Ändern Sie das Datenbankschema und brechen Sie die Anwendung ab.
Aktualisieren Sie die Anwendung, damit sie wieder mit dem Datenbankschema kompatibel ist.
Solange ich beide Commits drücke, master
bleibt es in einem funktionierenden Zustand. Eine historische Version ist jedoch defekt.
Mir ist bewusst, dass ich es verwenden kann, git rebase -i
um die Commits zusammenzudrücken. Das resultierende Commit ist jedoch umfangreich und weniger aussagekräftig. Wenn ich den Commit-Verlauf durchsuchen muss, um herauszufinden, warum ich etwas geändert habe, ist es mir lieber, wenn der ursprüngliche Commit anzeigt, was ich getan habe und warum.
Meine Fragen sind:
Hat jemand Schwierigkeiten aufgrund gebrochener historischer Verpflichtungen in Master gestoßen ?
Wenn ja, gibt es eine einfache Möglichkeit, solche Schwierigkeiten zu vermeiden, ohne einzelne Commit-Nachrichten und Änderungen zu verwerfen?
Antworten:
Es hängt weitgehend von der Verzweigungsstrategie Ihres Outfits ab, aber ich denke, dass es im Allgemeinen eine Menge Sinn macht, unterbrochene Commits in Entwicklungszweigen zu haben - der große "Gewinn" bei der Verwendung der Quellcodeverwaltung besteht darin, kleine Änderungen rückgängig zu machen, und manchmal sind Sie es auch Wenn du ein paar davon machst, musst du Eier brechen, um Omeletts zu machen.
Die einfache Möglichkeit, die einzelnen Commits zu erhalten, ohne den Master zu verschmutzen, besteht in der Verwendung von Zweigen. Sie können das brechende / experimentelle Zeug dort hineinlegen, so dass Sie eine feinkörnige Geschichte haben können, ohne die Geschichte des Hauptzweigs zu verschmutzen.
quelle
--no-ff
Option zum Zusammenführen zu verwenden, um zu erzwingen, dass ein Merge-Commit ausgeführt wird?Unterbrochene Commits sind etwas, das "einfach passiert" und nicht das Ende der Welt bedeuten sollte. Ich habe eine kleine, nörgelnde Stimme im Hinterkopf, die mir sagt, dass man gebrochenen Code aus Prinzip nicht wissentlich einchecken und daher historische Versionen mit einbeziehen sollte, aber es ist nichts, worüber ich in den Krieg ziehen würde.
Das viel gelobte Verzweigungsmodell von Git macht es möglich, unterbrochene Commits von bestimmten Zweigen fernzuhalten, z. B. wenn Ihr Team gitflow oder eine vereinfachte Version davon verwendet. Alles mit einer "Clean Master" -Richtlinie. In diesem Fall können Sie die endgültige, funktionierende Version als Merge-Commit einchecken, wobei die (beschädigten) Verlaufsversionen im Repository verfügbar sind, jedoch nicht in der Hauptzeile.
Wenn Ihr Team ein solches Verzweigungsmodell nicht übernommen hat, haben Sie eine gute Ausrede, um einfach das ganze Los zu meistern und damit fertig zu werden.
quelle
Nein, das ist nicht in Ordnung.
Wenn Sie jemals eine
git bisect
(und wer diese Killer-Funktion nicht liebt) gemacht haben, wissen Sie, welchen Wert eine Historie hat, in der jedes Commit aufgebaut wird.Wenn Sie während eines
bisect
nicht erstellten Commits viele Commits haben, haben Sie vielegit bisect skip
, die es schwierig machen, das letzte gute Commit zu finden.Wenn Sie eine Feature-Verzweigung fertig stellen und in der Master-Verzweigung zusammenführen, bereinigen Sie die Verzweigung vor dem Zusammenführen, damit Ihr Verlauf übersichtlich und aufbauend ist.
quelle
Ja. Backports, Reverts und Bisects sind schwerer. Lesen Sie also die Geschichte (siehe unten).
Nicht, dass ich es wüsste, obwohl Branchen eine anständige Lösung sind.
Ich halte es jedoch für richtig, die einzelnen Commits zu verwerfen (oder eher zu quetschen).
Während der Entwicklung, insbesondere bei TDD, ist es gut, früh und häufig zu beginnen. Sie möchten den vollständigen Überblick über das, was Sie tun, damit Sie zurückverfolgen oder genau herausfinden können, wann etwas schief gelaufen ist (oder sich in ein Refactoring gestürzt haben, das größer ist, als Sie kauen können). Commit away.
Sobald ein Feature / eine Änderung jedoch zum Pushen bereit ist, handelt es sich bei einem Commit um eine verpackte Änderung - im Idealfall um eine atomare Änderung, die so unabhängig wie möglich von anderen Änderungen [überprüft, neu basiert, zusammengeführt, ausgewählt, zurückgesetzt, mit Anmerkungen versehen] werden kann .
Mit Blick auf die Historie eines Projekts sollte eine Softwareänderung eigenständig ausgewertet werden. Baut es? Kommt es mit Tests? Funktioniert es? Was tut es? Welche Dateien mussten geändert werden, um diese Funktion bereitzustellen?
Das Zusammenstellen von Commits ist zwar möglich (und wird durch Zusammenführungen unterstützt), erschwert dies jedoch. Aus diesem Grund halte ich es für angemessen, Ihren Verlauf vor dem Pushen zu bereinigen, auch wenn es bedeutet, den Überblick darüber zu verlieren, wie Sie dort angekommen sind, wo Sie sich gerade befinden.
quelle
Kurze Antwort: Ja
Testen:
Testgetriebene Entwicklung bedeutet, dass Sie Tests schreiben, die brechen (dh fehlschlagen).
Dann schreiben Sie den Code, damit die Tests funktionieren.
Entwicklung:
Engagieren Sie sich klein, engagieren Sie sich oft.
Jedes Commit ist ein Rollback-Punkt. Wenn Sie feststellen, dass Sie sich auf dem falschen Weg befinden, können Sie relativ einfach zu einem vorherigen Punkt zurückkehren. Wenn Ihre Commits feinkörnig genug sind, können Sie zum richtigen Punkt zurückrollen.
Vorbehalt:
Dies gilt nicht Mittelwert
1) Sie checken den fehlerhaften Code in den Master ein.
2) Sie müssen alle Micro-Commits aktivieren, damit alle sie überprüfen können.
Verwenden Sie Zweige, um Ihre Arbeit zu erledigen. Komprimieren Sie potenziell Micro-Commits für die Überprüfungsprozesse, sodass sie in logisch getrennten Einheiten mit entsprechenden Kommentaren vorliegen. Wenn Sie git verwenden, verlieren Sie nicht den ursprünglichen Commit-Satz. Sie können einfach einen neuen, logischeren Commit-Satz für die Überprüfungsprozesse erstellen, die in master zusammengeführt werden.
quelle
Ich denke, solange die Commits lokal sind und nicht an andere weitergegeben werden, ist das nicht nur in Ordnung, es ist auch eine gute Art zu arbeiten. Übertragen Sie gebrochenen Code einfach nicht an andere.
quelle