Mein persönlicher Ansatz für ein Git-Commit ist, dass jedes Commit in seiner Vollständigkeit eine Änderungseinheit enthalten sollte.
Wenn ich mich entwickle, konzentriere ich mich normalerweise auf solche Einheiten. Aber manchmal wandert meine Aufmerksamkeit woanders hin und ich arbeite eine Weile an einem anderen Gerät. Dies ist wahrscheinlich nicht optimal, aber ich habe gelernt, mich sorgfältig zu engagieren ( git add --interactive
ist ein guter Freund von mir).
Es kann jedoch vorkommen, dass ich vergesse, meine Änderungen selektiv zu inszenieren und stattdessen die gesamte Datei festzuschreiben, da ich glaube, dass alle Änderungen, die ich im Diff sehe, tatsächlich mit derselben Einheit zusammenhängen, obwohl es möglicherweise ein oder zwei Änderungen gibt, die völlig unabhängig voneinander sind.
Dann ich git push
.
Ist das gefährlich? Sollte ich mich bemühen, das Commit so zu ändern, dass es nur die beabsichtigten Änderungen enthält? Mein Hauptanliegen ist, dass jeder, der sich die Geschichte noch einmal ansieht, die Veränderung sieht und sich wahrscheinlich einige Minuten am Kopf kratzt, bevor er merkt, dass es höchstwahrscheinlich ein Fehler ist. Schlimmer noch, ich kann mir vorstellen, dass die Änderung sogar verwandt aussieht und der Programmierer den Fehler möglicherweise nicht erkennt.
Das Problem ist, dass ich, da ich bereits gepusht habe, den Serververlauf nicht sicher umschreiben kann, sodass ich wahrscheinlich zuerst das Commit zurücksetzen, es richtig aufteilen und erneut festschreiben müsste. Alternativ könnte ich das Commit einfach mit einer besseren Commit-Nachricht ändern, aber ich müsste wirklich sehr schnell sein, da es auch das Umschreiben des Verlaufs erfordert. Als letzten Ausweg könnte ich einfach die Einheit festschreiben, an der ich als nächstes gearbeitet habe, und eine Notiz hinterlassen, dass es eine entsprechende Änderung beim vorherigen Festschreiben gibt (aber das fühlt sich falsch an).
Ich verstehe, dass dies in Multi-Entwickler-Setups mit ordnungsgemäßem Code-Review-Workflow wahrscheinlich nicht passieren würde. Ich verstehe auch, dass das Umschreiben des Verlaufs die beste Lösung dafür ist, wenn ich der einzige Entwickler eines Projekts bin.
Antworten:
Commit-Historie ist von entscheidender Bedeutung, aber aus drei Gründen:
Obwohl sich die Commits von Arbeitseinheiten ideal anhören, sind sie praktisch nichts, worauf man bestehen muss. Ich würde versuchen, Commits vernünftig zu halten, und Arbeitseinheiten sind ein guter Weg, um Commits gesund zu halten, aber versuchen Sie nicht, mit der Commit-Historie herumzuspielen, nur um die Commits sauber zu halten. Das ist so, als würde man eine Codedatei aktualisieren, damit alle Klammern so angeordnet werden, wie Sie es bevorzugen - nett, aber nutzlos.
Wenn Sie nun ein wenig Arbeit für einen anderen Zweig geleistet haben, setzen Sie ihn zurück und legen Sie ihn ordnungsgemäß für den richtigen Zweig fest. Das ist wichtig, aber wenn Sie während der Arbeit an der GUI ein wenig Servercode aktualisiert haben, müssen Sie sich darüber keine Sorgen machen.
quelle
In diesem Fall ist es keine große Sache, die Änderung beim nächsten Commit einfach rückgängig zu machen. Das Hinzufügen einer richtigen Commit-Nachricht (
Removing the XYZ that I accidentally added in C92A891
) reicht für andere Entwickler aus, um die Codeüberprüfung zu verstehen.Versuchen Sie, die Situation zu vermeiden, anstatt sich Gedanken über die Behebung eines bestimmten Vorfalls zu machen.
Dies ist das eigentliche Problem:
Sie sollten sich angewöhnen, niemals eine ganze Datei festzuschreiben (oder das Schlimmste an Ihrem gesamten Arbeitsbereich!). Festschreiben Sie immer Zeile für Zeile oder von einem ganzen Hunk, den Sie untersucht haben.
Wenn Sie auf diese Weise festschreiben (was sich so anhört, als würden Sie die meiste Zeit etwas tun), schleichen sich unbeabsichtigte Änderungen mit weit geringerer Wahrscheinlichkeit in Ihre Festschreibungen ein.
quelle
Anscheinend haben Sie ein lokales Repository auf Ihrem Computer und ein Repository, das für Ihre Mitarbeiter auf einem Server freigegeben ist. Warum haben Sie nur ein Repository auf Ihrem lokalen Computer? Normalerweise habe ich mindestens fünf, sodass ich in einem Repository an einer Sache arbeiten, einen Fehler in einem anderen beheben kann, ohne das erste Repo zu berühren, das möglicherweise unvollständig ist, und so weiter.
quelle