Mögliches Duplikat:
Den aktuellen Git-Zweig zu einem Master-Zweig machen
Ich habe zwei Zweige in meinem Git-Repository:
master
seotweaks
(ursprünglich von master
erstellt)Ich habe seotweaks
mit der Absicht erstellt, es schnell wieder in master
einzubinden. Das war jedoch vor drei Monaten und der Code in diesem Zweig ist 13 Versionen weiter als master
.
Er ist praktisch unser Arbeits-Master-Zweig geworden, da der gesamte Code in master
nun mehr oder weniger veraltet ist.
Sehr schlechte Praxis, ich weiß, Lektion gelernt.
Wissen Sie, wie ich den gesamten Inhalt des "Master"-Zweigs durch den in "Seotweaks" ersetzen kann?
Ich könnte einfach alles in master
löschen und zusammenführen, aber das fühlt sich nicht nach bester Praxis an.
Sie sollten in der Lage sein, die "ours"-Merge-Strategie zu verwenden, um den Master mit seotweaks wie diesem zu überschreiben:
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
Das Ergebnis sollte sein, dass Ihr Master jetzt im Wesentlichen seotweaks ist.
(-sein
ist die Abkürzung für -Strategie=dein
)
Aus den Dokumenten über die 'ours'-Strategie:
Dies löst eine beliebige Anzahl von Köpfen auf, aber der resultierende Baum des Zusammenschlusses ist immer der des aktuellen Kopfes des Zweiges, wobei alle Änderungen von allen anderen Zweigen ignoriert werden. Sie ist dazu gedacht, alte Entwicklungsgeschichte von Nebenzweigen zu ersetzen. Beachten Sie, dass dies ein Unterschied zur Option -Xours der rekursiven Zusammenführungsstrategie ist.
Update aus den Kommentaren: Wenn Sie die Fehlermeldung "refusing to merge unrelated histories" erhalten, dann ändern Sie die zweite Zeile wie folgt: git "merge --allow-unrelated-histories -s ours master".
Wie wäre es mit git branch -m, um den Master-Zweig in einen anderen umzubenennen, und dann den seotweaks-Zweig in Master umzubenennen? Etwa so:
git branch -m master old-master
git branch -m seotweaks master
git push -f origin master
Dies könnte Commits in origin master entfernen, bitte überprüfen Sie Ihren origin master bevor Sie git push -f origin master
ausführen.
Sie können den Master-Zweig auf dem Remote-Zweig umbenennen/entfernen, aber das wird ein Problem sein, wenn viele Leute ihre Arbeit auf dem Remote-Master-Zweig aufgebaut haben und diesen Zweig in ihr lokales Repository gezogen haben.
Das könnte hier nicht der Fall sein, da jeder am Zweig seotweaks
zu arbeiten scheint.
In diesem Fall können Sie:
git remote --show funktioniert möglicherweise nicht.
(Führen Sie ein git remote show
durch, um zu überprüfen, wie Ihr Remote in Ihrem lokalen Repo deklariert ist. Ich werde 'origin
' annehmen)
(In Bezug auf GitHub, kommentiert house9: "Ich musste einen zusätzlichen Schritt machen, auf GitHub auf die Schaltfläche Admin
klicken und den Default Branch
auf etwas anderes als master
setzen, und ihn danach wieder zurücksetzen")
git branch -m master master-old # rename master on local
git push origin :master # delete master on remote
git push origin master-old # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master # create master on remote
Aber nochmal: