Github rebase upstream/master origin/master
Ich bin ziemlich neu auf github social coding und Probleme folgenden github-Richtlinien. Ich werde versuchen zu beschreiben, was passiert ist und was ich versuche zu erreichen - in der Hoffnung, dass mehr erfahrene git-Assistenten können Sie mir helfen herauszufinden, die arcade-Befehle, die dazu nötig sind.
- Ursprünglichen Projekt: https://github.com/phatboyg/MassTransit
- Meine Gabel: https://github.com/davidcie/MassTransit
- Plattform: Windows, mit Github für Windows + die PowerShell
, Was passiert
- Ich Gabel MassTransit zurück in Juli 2012. Seine master Zweig zurück dann wurde in der version v2.1.1, mit dem letzten commit auf Mar 29, 2012.
- Folgenden github Ratschläge, die ich dann mit Programmieren angefangen einige änderungen auf ein Thema Niederlassung.
- Ein paar commits später, wenn das feature fertig war, habe ich zusammengeführt, mein Thema-Zweig in meinem Klon lokalen master und dann schob das auf github.
- Seit Mar 29, 2012, MassTransit entwickelt wurde, auf seine entwickeln Zweig. All jene änderungen, die v2.6.0, verschmolzen mit seiner master vor kurzem.
, Was ich tun möchte
Ich würde gerne alle änderungen, die zusammengeführt wurden upstream/master. Vorzugsweise als Ihre jeweiligen begeht, nicht eine massive Begehen von Hunderten von Dateien. Weil ich dabei war die Entwicklung auf dem ehemaligen upstream/master (vom Mar 29, 2012), denke ich, würde effektiv zu müssen "einfügen" einige commits in zwischen dem letzten upstream/master änderung der Mar 29 und mein Erster commit-Aug-8, und dann oben hinzufügen, dass diejenigen, die später passiert. Wie mache ich das?
(Ich möchte auch nicht zu zerstören, meine commits/Gabel in den Prozess 😉
Was ich auch versuchte,
git checkout master
git remote add upstream git://github.com/phatboyg/MassTransit.git
git rebase upstream/master
git push
Doch, es ließ mich nicht tun, dann git push
beklagen, dass meine lokale Tipp war 10 begeht, hinter dem Ursprung (möglicherweise die commits ich habe auf mein Thema Niederlassung und später zusammengeführt origin/master?).
Empfehlungen?
Scheint es, dass ich gebissen worden von Empfehlungen. ZB. vielleicht wäre es besser, erstellen Sie einen separaten Zweig, zB. local-master -, und behandeln Sie diese wie... nun, mein eigener Meister. Dann master wäre es nur für das halten in Kontakt mit upstream/master, und ich würde gelegentlich Stellungswechsel origin/master mit upstream/master und verschmelzen mit Herkunft/local-master -...
Wie seid Ihr verwalten Sie Ihre Gabeln?
Anderen Fragen
Ich habe nicht in der Lage, einen Weg zu finden, zu visualisieren Zweig der Geschichte, welchen Zweig wurde fusioniert mit einer anderen und, wenn, usw. Github für Windows zeigt nur eine flache Geschichte, die für den aktuell ausgewählten Zweig (trauriges Gesicht hier). Die website nicht einige Visualisierungen für das Netzwerk (hier ist eine für MassTransit), aber das fühlt sich viel weniger informativ als sagen die Graphen in TortoiseHg. Übersehe ich hier etwas offensichtliches? Tut jeder andere auch, nur daran erinnern, was war verschmolzen mit dem, was und Wann?
Bearbeiten (31. August)
Bin ich teilen eine poor-man ' s-Visualisierung helfen, zu erklären, was passiert ist.
- Ich gespaltener wenn C1 war die Letzte auf upstream/master.
- Ich entwickelte dann auf meine Herkunft/feature-1.
- Man das feature komplett war, ich fusionierte Sie mit meinem origin/master.
- Wenn upstream - /mega-feature wurde abgeschlossen, es wurde zusammengeführt mit upstream/master, effektiv historisch kopieren C2 und C3 zu upstream/master. (Oder vielleicht upstream/master war zurückgesetzt mit upstream - /mega-feature?)
- Würde ich nun gerne kopieren C2, C3 und C4 zu meinem origin/master.
- verwenden Sie merge statt rebase. Warum bist du mit rebase?
- Ich dachte, dass die Verwendung von merge würde nur gelten, alle "upstream/master" änderungen an meinem repo und lassen Sie es in einen ungebunden Zustand. Und so, während deren korrekte Ergebnisse in Bezug auf den Zustand der Quelle meiner Dateien, auf die Begehung würde ich in einem riesigen commit ändern über 600 Dateien, ohne genauere Informationen. AFAIK Stellungswechsel würde verhindern, dass, und würde stattdessen ziehen die einzelnen commits. Richtig?
- Ich habe aktualisiert mein Frage helfen, zu erklären, was passiert ist und was ich tun möchte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie werden, oder haben eine
origin
remote für die Gabel, und das gleiche nochmal fürupstream
(wie beschrieben).Ich würde dann einen Holen der
upstream
so, dass Sie alle Ihre Zweige lokal durchgeführt. Sie können dann die Vergleiche zwischen den repos und sehen, ob es eine gemeinsame Verpflichtung auf oder in der Nähe der Divergenz Datum.Den
gitk --all
Visualisierung ist hier nützlich. Vergessen Sie nicht, dass selbst wenn Sie ein Stellungswechsel alte commit-Serie ist immer noch da, also können Sie ihm einen Namen geben[BEARBEITEN] EINE wortreiche Beschreibung.
Klar der merge-commit 'in die Quere', so muss massiert werden Weg, so dass die repos gebracht werden kann, in der sync wieder.
temp
Zweig auf Ihre aktuelle Kopf, so dass nichts verloren geht.reset
Ihre master-branch zurück, um den letzten gemeinsamen commit zwischen Ihnen und upstream.reset
dem Zweig, um nur vor dem merge.checkout
dass merge-commit, um die arbeiten Baum, wie Sie es erwarten, danncommit
dass Feste Arbeit-tree auf deinemfeature
Zweig (also kein merge).Haben Sie jetzt eine saubere Linie auf
master
, die einen sauberen, aber alten Linie auffeature
, und alle post merge Entwicklungen auftemp
. wenn Glücklich sind, sollten Sie in der Lage sein, um zu erzwingen, drücken Sie diese, um Ihreorigin
.pull
von "upstream" - (D. H.master
usw.) sollten alle schnell nach vorne.rebase
diesen post merge Entwicklungen austemp
auffeature
(falls erforderlich).rebase
feature
auf den letzten commit, die Sie gut kennen, auf master (sollte relativ einfach sein).rebase
feature
(wieder) auf die neueste commit auf dem master, Befestigung, wie Sie gehen (zu kombinieren mit dem letzten Schritt, wenn es einfach ist;-).Dieser sollte schließlich geben Sie eine saubere Linie von feature-Entwicklung an der Spitze von master -, und geeignet für das ziehen upstream-ohne irgendeinen Konflikt.
git remote
, die zeigt, sowohl Ursprungs-als auch upstream). Was meinst du mit gemeinsamen Begehen? Ich weiß die genaue Begehen, nachdem die meine repo auseinander. Was kann ich mit dieser information tun?topic
Zweig noch eine hinter der Zusammenführung zu Ihrem Meister?git reset HEAD~10
wiederherstellen der Funktion-mit-Kopf verschmelzen, danngit push --force
. Mitforce
ich fühlte mich einige bisher unbekannte Mächte 🙂 Also ich zurückgesetzt meinen feature-branch, das beheben von Fehlern, die entlang dem Weg, und wieder hat eingit push --force
meinen feature-branch. Dies war der Schlüssel, wie merge-Konflikte, wenn dabei eine ordentlichegit push
führte zu Fehlern, Behebung denen besann mich zurück auf pre-rebase-Zustand. Danke für Eure Ideen, Sie helfen mir auf meinem steinigen Weg zu besserer git-Verständnis.Hier sind einige Ideen.
Cherry pick-Methode:
Neuen Zweig Stellungswechsel Methode:
Rebase --auf-Methode (können Sie wählen, welche Reihe von commits, die du willst):