Frage Wie Master-Zweig in Git komplett ersetzen, von einem anderen Zweig? [Duplikat]


Mögliche Duplikate:
Ändern Sie den aktuellen Zweig in git in master 

Ich habe zwei Zweige in meinem Git Repo:

  1. Meister
  2. Seotweaks (ursprünglich vom Master erstellt)

ich erschuf seotweaks mit der Absicht, es schnell wieder hinein zu verschmelzen masteraber das war vor 3 Monaten und der Code in dieser Branche ist 13 Versionen voraus masterEs ist effektiv unser Master-Zweig wie der gesamte Code geworden master ist jetzt mehr oder weniger veraltet.

Sehr schlechte Praxis, ich weiß, Lektion gelernt.

Weißt du, wie ich alle Inhalte der. Ersetzen kann? master verzweigen mit denen in seotweaks?

Ich könnte einfach alles löschen master und fusionieren, aber das fühlt sich nicht als Best Practice an.


1285
2018-05-19 03:06


Ursprung


Antworten:


Sie sollten in der Lage sein, die Mergerstrategie "unsere" zu verwenden, um Master mit Seotweaks wie diesem zu überschreiben:

git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks

Das Ergebnis sollte dein Master nun im Wesentlichen seotweaks sein.

(-s ours Kurzform für --strategy=ours)

Von die Dokumente über die "unsere" Strategie:

Dies löst eine beliebige Anzahl von Köpfen auf, aber der resultierende Baum der Zusammenführung ist immer der des aktuellen Zweigkopfes, wobei alle Änderungen von allen anderen Zweigen ignoriert werden. Es soll dazu dienen, die alte Entwicklungsgeschichte der Seitenäste abzulösen. Beachten Sie, dass sich dies von der Option -Xours zur rekursiven Zusammenführungsstrategie unterscheidet.


2238
2018-05-19 04:51



Was ist mit der Verwendung von git branch -m, um den Master-Zweig in einen anderen umzubenennen, dann benenne seotweaks branch in master um? Etwas wie das:

git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

Dadurch werden möglicherweise Commits im Ursprungsmaster entferntBitte überprüfen Sie Ihren Ursprungs-Master, bevor Sie ihn ausführen git push -f origin master.


370
2018-05-19 03:11



Sie können Master auf Remote umbenennen / entfernen, aber das wird ein Problem sein, wenn viele Leute ihre Arbeit auf dem Remote-Master-Zweig basieren und diesen Zweig in ihrem lokalen Repo gezogen haben.
Das ist hier vielleicht nicht der Fall, da alle auf der Zweigstelle zu arbeiten scheinen. "seotweaks".

In diesem Fall können Sie:
git remote --show funktioniert möglicherweise nicht. (Mach ein git remote show Überprüfen Sie, wie Ihre Fernbedienung in Ihrem lokalen Repo deklariert ist. Ich werde annehmen 'origin')
(In Bezug auf GitHub, Haus9 Kommentare: "Ich musste einen zusätzlichen Schritt machen, klicken Sie auf"Admin'Taste auf GitHub und stellen Sie die'Default Branch"zu etwas anderem als"master', dann lege es hinterher zurück ")

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 wieder:

  • Wenn andere Benutzer versuchen, zu ziehen, während der Master auf der Fernbedienung gelöscht wird, schlagen ihre Züge fehl ("keine solche Referenz auf der Fernbedienung")
  • Wenn Master auf Remote neu erstellt wird, versucht ein Pull, diesen neuen Master auf seinem lokalen (jetzt alten) Master zusammenzuführen: viele Konflikte. Sie müssen es tatsächlich tun reset --hard ihr lokaler Master zum Remote / Master-Zweig wird sie holen und ihren aktuellen Master vergessen.

61
2018-05-19 03:57



Da seotweaks ursprünglich als eine Verzweigung vom Master erstellt wurde, ist es eine gute Idee, sie wieder zusammenzuführen. Wenn Sie jedoch in einer Situation sind, in der einer Ihrer Zweige nicht wirklich ein Zweig vom Master ist oder Ihre Geschichte so anders ist, dass Sie einfach den Master-Zweig zugunsten des neuen Zweigs ausradieren wollen, den Sie an sich gearbeitet haben kann dies tun:

git push [-f] origin seotweaks:master

Dies ist besonders hilfreich, wenn Sie diesen Fehler erhalten

! [remote rejected] master (deletion of the current branch prohibited)

Sie verwenden github nicht und haben keinen Zugriff auf die Registerkarte "Administration", um den Standardzweig für Ihr Remote-Repo zu ändern. Darüber hinaus führt dies nicht zu Ausfallzeiten oder Rennbedingungen, wie sie beim Löschen des Masters auftreten können:

git push origin :master

21
2017-07-25 20:44



Ich fand das der beste Weg dies zu tun (Ich hatte ein Problem mit meinem Server ließ mich nicht löschen)

Geben Sie auf dem Server, der das Ursprungsrepository hostet, Folgendes aus einem Verzeichnis im Repository ein:

git config receive.denyDeleteCurrent ignore

Auf Ihrer Workstation:

git branch -m master vabandoned                 # rename master on local
git branch -m newBranch master                  # locally rename branch newBranch to master
git push origin :master                         # delete the remote's master
git push origin master:refs/heads/master        # push the new master to the remote
git push origin abandoned:refs/heads/abandoned  # push the old master to the remote

Zurück auf dem Server, der das Ursprungsrepository hostet:

git config receive.denyDeleteCurrent true

Kredit an den Autor dieser Seite

http://www.mslinn.com/blog/?p=772


1
2017-09-28 13:13