Git rebase verliert die Geschichte, warum dann Stellungswechsel?
Habe ich in rebasierung mit Git in den letzten paar Tagen. Die meisten der Argumente für die erneute basiszuordnung sagen, dass es bereinigt die Geschichte und macht es mehr linear. Wenn Sie Ebene führt (zum Beispiel), Sie bekommen eine Geschichte, die zeigt, Wann die Geschichte abweicht und wenn es gebracht wurde, wieder zusammen. Soweit ich das beurteilen kann, rebasierung entfernt alle, die Geschichte. Frage ist: warum würden Sie nicht wollen, dass die repo-Geschichte zu reflektieren, die alle Möglichkeiten, den entwickelten code, einschließlich, wo und wie es auseinander?
- Dies ist, warum einige Leute sagen, sollten Sie nicht verwenden
git rebase
sehr viel. paul.stadig.name/2010/12/... könnte sich für Sie lohnen, zu Lesen. - Danke. Ich Neige dazu, Stimmen zu mit ihm, ich denke, aber ich kann mir vorstellen es gibt auch Situationen, in denen solche tools (
git rebase
und Freunde) sind nützlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht richtig. Rebasierung, wie der name schon sagt, ändert sich die Basis von commits. In der Regel kein commit ist verloren in diesem Prozess (außer, dass Sie nicht bekommen, ein merge-commit). Während Ihr argument über das halten wirklich alles, was der Entwicklung innerhalb der Geschichte die Art und Weise es gemacht wurde ist richtig, sehr oft führt dies zu verwirrenden Geschichten.
Besonders bei der Arbeit mit anderen, jede Arbeit auf Ihre eigenen Filialen während der erfordern bestimmte änderungen von anderen weiter (zum Beispiel A fragt B etwas umzusetzen, so dass Eine können dieses feature verwenden, in seiner eigenen Entwicklung), führt dies zu vielen fusioniert. Zum Beispiel so:
In diesem Beispiel haben wir ein Zweig, der arbeitet separat für die Zeit, aber ständig zieht änderungen aus den ursprünglichen Zweig (# original sind verpflichtet, * sind fusioniert).
Nun, wenn wir eine rebase auf Zweig B vor der Zusammenführung in wieder in, wir könnten die folgenden:
Dieser stellt die gleichen tatsächlichen änderungen, aber B zurückgesetzt wurde um einige ältere commit auf, so dass alle vereint auf B, die durchgeführt wurden, bevor Sie nicht mehr benötigt werden (da diese änderungen bereits in älteren commit). Und alle commits, die werden jetzt noch fehlt, sind die Zusammenführungen, die in der Regel nicht enthalten keine Informationen über den Entwicklungsprozess. (Beachten Sie, dass in diesem Beispiel könnte man auch den Stellungswechsel, die letzten commit auf Eine später auf, um eine gerade Linie, effektiv entfernen Sie alle Hinweise auf den zweiten branch)
Stellen Sie sich vor Sie arbeiten an einem Geheimen Projekt der Weltherrschaft. Es gibt drei Köpfe, die auf diese Verschwörung:
Und Sie alle Stimmen zu, kommen Sie zu Ihrem geheimen Stützpunkt in 1 Woche mit jeweils 1 ausführlichen plan.
Den computer-hacker, wird eine pragmatische Programmierer, schlug vor, dass Sie Git verwenden, um das speichern aller Dateien von den Plänen. Jede Gabel wird in der Anfangsphase des Projekts repo-und Sie alle verbinden in einer Woche.
Alle Stimmen zu und in den folgenden Tagen die Geschichte geht so:
Das Genie
Machte er insgesamt 70 verpflichtet, 10 pro Tag.
Der Allgemeinen
Er Spion der repo von Ihren Kameraden zu und machte eine Strategie, um Sie zu schlagen. Er machte 3 verpflichtet sich, alle für den letzten Tag.
Die Computer-Hacker
Diese pragmatische Programmierer verwendet Filialen. Er machte 4 verschiedene Pläne, die jeweils auf einem ast. Jeder Zweig zurückgesetzt wurde, um nur ein commit.
Sieben Tage vergangen und die Gruppe treffen Sie wieder Zusammenführen, alle Pläne, in ein master-Stück. Sie alle waren begierig zu starten, so dass alle von Ihnen ausprobiert zu verschmelzen all die Sachen auf seine eigenen.
Hier geht die Geschichte:
Das Genie
Er fusioniert alle änderungen, die von der General-repo und dann werden die Computer-Hacker ist eine. Und dann, als ein logic-Liebhaber, gab er einen Blick auf die log. Er erwartet, um zu sehen, eine logische evolution einer Idee, wo die Sachen gebaut wurden, nach den bisherigen Ideen-verpflichtet.
Aber was die logs gezeigt, wurde eine Vielzahl von commits, die von verschiedenen Ideen, die alle gemischt in der Zeit Online. Ein Leser konnte nicht wirklich verstehen, die evolution, die Argumentation der begeht nur durch das Lesen der commit-Zeit-Linie.
Damit er endete mit einem Chaos, dass selbst ein Genie konnte es nicht verstehen.
Der Allgemeinen
Den Allgemeinen Gedanken: Teile und herrsche!
Und so fasste er den repo-der Genius auf seine repo. Er in den log geschaut und sah eine Reihe von commits, die von der Genius-Idee, die folgte eine understable-progression, bis zum letzten Tag. Der Letzte Tag der Ideen, das Allgemeine und das Genie waren gemischt.
Er spioniert die computer-Hacker und wusste über die Rebase-Lösung. So hat er ein Stellungswechsel der eigenen Idee und versuchen Sie den Abgleich erneut.
Nun das log zeigte eine logische progression jeden Tag.
Die Computer-Hacker
Diese pragmatische Programmierer erstellt ein Integrations-branch für die geniale Idee, ein weiteres für die Allgemeine Idee und ein anderer für seine eigenen Ideen. Er Tat einen Stellungswechsel, um jeden Zweig. Und dann fasste er alle in den master.
Alle seine Teamkollegen sah, dass seine log war toll. Es war einfach. Es war understable auf den ersten Blick.
Wenn eine Idee eingeführt, ein problem, es war klar, in dem commit eingeführt wurde, denn es war nur einer.
Endete Sie erobern die ganze Welt und Sie verschwanden den Einsatz von Subversion.
Und alle waren glücklich.
Sie einen Stellungswechsel vor allem zu überarbeiten, Ihre lokale commits, die du noch nicht gestoßen noch) von einem remote-branch (Sie Holen), um zu lösen alle Konflikte lokal (D. H. bevor Sie schieben Sie Sie zurück an das upstream-repo).
Siehe "git-workflow und Stellungswechsel vs merge Fragen" und, ganz detailliert: "git rebase vs git merge" .
Aber rebase ist nicht beschränkt auf das Szenario, und in Kombination mit "--interactive", es erlaubt für einige lokale re-Bestellung und Reinigung Ihrer Geschichte. Siehe auch "Trimmen GIT Einchecken/Quetschen GIT Geschichte".
Wenn Sie einen Fehler machen, auf einem öffentlichen repository und niemand hat die Gabel/zusammengeführt/zog aus, noch, Sie können das Gesicht zu wahren und Verwirrung:
Den Papierkorb zu leeren: