2016-07-17 8 views
1

Ich versuche, meine Gabel mit Upstream zu synchronisieren.Wie eine große Anzahl von Commits rebase

git rebase upstream/master 

Aber leider fand ich, dass es mehr als 100 meiner lokalen Commits sind, und jeder von ihnen müssen manuell Konfliktlösung.

Eine der Ideen, die ich denke, ist, dass ich alle lokalen Commits in eins zerquetschen kann, dann Rebasieren nur ein Commit wird einfacher sein. Aber das ist das letzte, was ich will, da ich wirklich alle meine Aufzeichnungen behalten will.

Gibt es sowieso, um riesige Commits mit weniger Aufwand zu rebasieren?

+0

Wie in aller Welt haben Sie das geschafft? Wo kamen lokal und remote nicht synchronisiert her? Hast du eine Pull-Rebase ausprobiert? – jonrsharpe

+3

Gibt es einen bestimmten Grund, warum Sie 'git rebase' im Gegensatz zu' git pull' verwenden (d. H. 'Git pull upstream/master')? Letzteres wird einen Verlauf mit zwei Zweigen erzeugen, aber es wird nur versuchen, die letzten Commits flussaufwärts und in Ihrem lokalen Arbeitsbereich zusammenzuführen, was bedeutet, dass Sie Commits nur einmal auflösen müssen. – Kevin

Antwort

1

Ich denke, eine Zusammenführung ist eigentlich, was Sie hier wollen, nicht eine Rebase. Das Auflösen der Zusammenführungskonflikte entspricht dem, was Sie sehen würden, wenn Sie alle 100+ Commits auf ein einzelnes Commit zerquetschen und dieses Commit dann rebasieren würden. Aber mit der Zusammenführung behalten Sie Ihre Geschichte der laufenden Arbeiten nach Wunsch bei.

Rebase ist nett, wenn Sie nur ein paar Commits haben, um mit den neuesten Arbeiten von Gleichgesinnten zu synchronisieren, oder eine spezielle Notwendigkeit haben, den Verlauf neu zu schreiben, aber wenn Sie um mehr als 100 Commits abgewichen sind, haben Sie ein Anwendungsfall, der häufiger mit einer Verzweigung behandelt würde. Die Synchronisation über einen Merge-Commit finde ich in diesem Fall durchaus sinnvoll.

Wenn Sie wirklich müssen die einzige sein, wem Sie Ihre Arbeit-in-progress Geschichte sichtbar ist, können Sie eine lokale Niederlassung erstellen (git branch <my-true-local-history>) wies auf den Kopf Ihrer lokalen Arbeits-in-progress zu erhalten eine benannte Referenz auf das Commit und dann eine Squash-Merge (git merge --squash), die immer noch ein Merge-Commit erstellt, aber Ihre Work-in-Progress-Commits auf einen einzigen Commit reduziert (der lokale Zweig, den Sie zuvor erstellt haben, zeigt weiterhin darauf) die wahre detaillierte Geschichte jedoch).

+0

Danke. 'git merge' funktioniert. – harryz

Verwandte Themen