Ich habe also dieses große Projekt, das gerade von mir überarbeitet wird. Ich ändere eine Menge Dinge, daher gibt es keine Chance, dass sie bald kompiliert werden. Ich lebe in einem speziellen Git-Zweig, den ich benannt habe cleanup
( master
der natürlich irgendwann zusammengeführt wird).
Das Problem ist, dass ich / wir die Richtlinie haben, niemals nicht kompilierten Code zu schreiben (idealerweise sollte es auch funktionieren, aber es muss zumindest kompiliert und verlinkt werden). Also, bis ich mit dieser riesigen Aufgabe fertig bin, kann ich nichts mehr festlegen (für die Überprüfung oder für die Buchhaltung).
So arbeite ich nicht gerne (ich glaube, die meisten Leute verpflichten sich mindestens einmal am Tag oder so).
Was denkst du? Gibt es eine Lösung, die ich übersehen habe?
Kann ich git später anweisen, Commits zusammenzufassen oder so? Ich könnte mit nicht kompiliertem Commit leben, solange sie in der Filiale bleibencleanup
.
Bearbeiten
Zum Thema Pushing / Committing: Ich bin mir bewusst, dass es ein großer Unterschied ist, aber später wird es zu fehlerhaften Überarbeitungen kommen, wenn ich meine Inhalte zusammenführe master
. Wenn Sie also durch den Verlauf blättern (oder git bisect
...), sind die "lokalen" Revisionen weltweit zugänglich. Daher ist es nicht die beste Lösung, sich nur lokal zu verpflichten und nicht zu pushen, da dies später zu Problemen führen kann (wenn das Thema für einige Zeit geschlossen und vergessen ist).
Kurz gesagt: Lokale Commits werden irgendwann verschoben. In der globalen Historie sollten keine nicht kompilierten Commits angezeigt werden.
quelle
Antworten:
Mit dem
git merge --squash
Befehl können Sie ein einzelnes Festschreiben über dem aktuellen Zweig erstellen, dessen Wirkung dem Zusammenführen eines anderen Zweigs entspricht. Der Befehl aktualisiert den Arbeitsbaum und bereitet die Änderungen im Index vor, sodass Sie als Nächstes nur noch Folgendes ausführen müssen:Der
git rebase -i
Befehl kann auch Squash-Commits ausführen, erfordert jedoch mehr Arbeit.quelle
Ein Rewrite ist kein Refactoring
Mir ist klar, dass Sie an der Verwendung von Git interessiert sind, aber ich würde argumentieren, dass Sie überlegen sollten, die Art und Weise, wie Sie Refactorings durchführen, mehr zu ändern als die Art und Weise, wie Sie Git verwenden (obwohl ich denke, dass Git Ihnen helfen kann).
Martin Fowler definiert Refactoring als :
Wenn Sie diese Methode anwenden, können Sie regelmäßig einen Commit (und einen Push) ausführen.
Sie könnten argumentieren, dass dies unpraktisch ist und dass es für etwas Großes nicht funktioniert. Hier kann die Mikado-Methode helfen. Sie zerlegen ein großes Refactoring in eine Reihe kleiner Refactorings, indem Sie ein Abhängigkeitsdiagramm erstellen. Die Methode ist rekursiv. Versuchen Sie, Ihre Änderung vorzunehmen. Es wird nichts eingebrochen. Andernfalls machen Sie Ihre Änderung rückgängig und notieren sich die Voraussetzungen. Nacheinander beheben Sie die erforderlichen Refactorings, bis Sie Ihr Hauptziel für das Refactoring erreicht haben.
Git kann dieser Methode wirklich helfen. Sie können Ihren lokalen (defekten) Zweig behalten. Während Sie die Unterziele festlegen (und verschieben), können Sie zu
rebase
Ihrem Hauptziel über die soeben festgelegten Festschreibungen hinaus verzweigen, bis es nicht mehr unterbrochen wird.quelle
Schauen Sie sich die Handbuchseite an
git rebase
, insbesondere diegit rebase -i
Variante. Sie können beliebig viele Commits in Ihrem Verlauf nachbestellen, löschen oder zusammenpressen. Das hört sich nach dem an, wonach Sie suchen. Ich benutze es die ganze Zeit in genau der Situation, die Sie beschreiben: Machen Sie viele kleine Commits, die nicht für den öffentlichen Verbrauch geeignet sind, und fassen Sie sie dann zu einem einzigen "Refactoring" -Commit zusammen, bevor Sie sie in das gemeinsam genutzte Repository verschieben.quelle
Sie verwenden Git, so begehen bedeutet nicht unbedingt , drängen Sie Ihre Änderungen ....
IMHO, und wenn Sie mit Git arbeiten, ist es perfekt, Ihre Arbeit festzuschreiben, auch wenn sie nicht kompiliert wird. Denn nachdem Sie Ihre Änderungen festgeschrieben haben, wird niemand den Code zur Verfügung haben (bis Sie ihn pushen). Natürlich müssen Sie vor dem Pushen sicherstellen, dass es einwandfrei funktioniert und kompiliert wird, damit andere Ihre Änderungen problemlos abrufen und zusammenführen können.
Außerdem arbeiten Sie an einem anderen Zweig als dem Hauptzweig. Also, wenn Sie wollen (und ich empfehle dies), werden Sie Ihre Niederlassung nie schieben. Sobald Sie das Refactoring abgeschlossen haben, checken Sie einfach den Master-Zweig aus, führen Ihre Änderungen zusammen und drücken den Master-Zweig.
Bearbeiten
In diesem Fall können Sie verwenden
git cherry-pick
oder damit herumspielengit rebase
quelle