Ich habe ein Repository auf Github gespalten. Ich habe einige kleinere Änderungen vorgenommen und Pull-Anfragen an den Upstream gesendet, aber auf dem Weg ist meine Gabelung so verstümmelt, dass ich keine sauberen Pull-Anfragen generieren kann. Wenn ich eine Pull-Anfrage von einem Zweig mit sechs Änderungen starte, möchte Github dreizehn einreichen, von denen sieben bereits vorgelagert sind (Natch).
Mein Problem scheint darin zu liegen, nur die neuesten Commits abzurufen , aber wenn ich einen neuen Zweig erstelle und Commits auswähle, habe ich immer noch Extras. Ich habe mich auch mit Rebasing beschäftigt , aber jetzt sieht es so aus, als wäre sogar mein Master so durcheinander, dass ich keine saubere Kopie von Upstream generieren kann . Dies liegt anscheinend daran, dass ich nicht verstanden habe, dass ich neu aufbauen musste, anstatt zu verschmelzen . Ich habe also eindeutig Fehler gemacht. Ich versuche herauszufinden, wie ich diesen Knoten lösen und in einen sauberen Zustand zurückkehren kann, in dem ich mich nützlich vorwärts bewegen kann.
Ich möchte meine Gabel wegblasen und eine neue Gabel aus dem Upstream machen, aber ich denke, das ist auch schwierig.
Wie erhalte ich eine Github-Absolution, nachdem ich meine Git-Sünden gestanden habe?
Antworten:
Schritt 1: Upstream-Änderungen vornehmen
Es wird empfohlen, das Upstream-Repo als "Upstream" hinzuzufügen, wie auf der Seite " Fork a Repo " erläutert :
Mit dieser
--rebase
Option werden Ihre Änderungen ohne Zusammenführung auf das letzte Commit gesetzt.Schritt 2: (Optional) Führen Sie Ihre Commits zu einem Commit zusammen
Dieser Befehl "macht" alle Ihre Commits rückgängig, ändert jedoch nicht die Dateien. So können Sie alle Ihre Änderungen in einem einzigen Commit festschreiben.
Schritt 3: Überprüfen und testen Sie Ihre Änderungen
Um zu zeigen , die Änderungen verwenden , um eine GUI wie der eingebauten in
gitk
, Sourcetree , TortoiseGit oder Turm ( gegen Entgelt) , usw.Schritt 4: Drücken Sie
git push
wird einen Fehler auslösen, da der Push den Verlauf des Ziel-Repositorys ändern würde.Wenn Sie sicher sind, dass die in Schritt 3 gezeigten Änderungen korrekt sind, drücken Sie mit "-f".
Zusätzliche Informationen
Der Befehl zum Hinzufügen einer Fernbedienung lautet:
Sie können auch von einer direkten URL abrufen:
In den anderen Schritten benötigen Sie jedoch den Hash des neuesten Upstream-Commits anstelle von "Upstream / Master".
quelle
So wie ich es verstehe, ist es sowohl bei Git als auch bei Mercurial (ich habe nur letzteres verwendet, daher kann ich mich irren) überhaupt keine große Sache, eine Gabel wegzublasen und neu zu gabeln. Das mache ich die ganze Zeit mit meinen Projekten. Wenn Sie damit einverstanden sind (Ihre Änderungen sichern können oder keine wesentlichen Änderungen an Ihrer Gabel haben), würde ich sagen, dass dies wahrscheinlich der richtige Weg ist.
Denken Sie daran, dass mit DVCS durch das Verzweigen eines Repositorys ein vollständiger Klon des gesamten Repos erstellt wird . Wenn Sie Ihre aktuelle Gabel löschen und dann das ursprüngliche Repo erneut gabeln, haben Sie eine völlig saubere Tafel, von der aus Sie arbeiten können.
quelle
git format-patch
, um die Commits beizubehalten, die ich zuerst speichern möchte.git format-patch
das Speichern Ihrer Arbeit ist eine Art Umgehung aller hilfreichen Tools, die Git für die Verwaltung von Zweigen hat. In Zukunft ist es richtig,git rebase -i
Ihre Commits über dem neuen Upstream-master
Zweig selektiv neu zu schreiben .Fügen Sie in Ihrem privaten Repo das Repo des Forkees als Fernbedienung hinzu. Setzen Sie Ihre Zweige von den Zweigen der Fernbedienung aus neu zurück. Machen Sie einen Kraftstoß auf Ihr Github-Repo.
Wenn Sie genaue Befehle benötigen, lassen Sie es mich wissen. Lassen Sie mich auch wissen, ob Sie versuchen möchten, lokale Commits beizubehalten, oder ob "wegblasen" in Ordnung ist.
quelle