it-swarm.com.de

Wie ersetze ich den Master-Zweig in Git vollständig von einem anderen Zweig?

Mögliches Duplikat:
Den aktuellen Git-Zweig zum Master-Zweig machen

Ich habe zwei Zweige in meinem Git-Repository:

  1. master
  2. seotweaks (ursprünglich erstellt aus master)

Ich habe seotweaks mit der Absicht erstellt, es schnell wieder in master zusammenzuführen. Das war jedoch vor drei Monaten und der Code in diesem Zweig ist 13 Versionen vor master.

Es ist praktisch zu unserer Hauptniederlassung geworden, da der gesamte Code in master mittlerweile mehr oder weniger veraltet ist.

Ich weiß, dass es eine sehr schlechte Praxis ist.

Wissen Sie, wie ich den gesamten Inhalt des Zweigs master durch den Inhalt des Zweigs seotweaks ersetzen kann?

Ich könnte einfach alles in master löschen und zusammenführen, aber dies fühlt sich nicht nach Best Practice an.

1497
Jason

Sie sollten in der Lage sein, die Merge-Strategie "ours" zu verwenden, um Master mit Seotweaks wie folgt zu überschreiben:

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

Das Ergebnis sollte sein, dass Ihr Master nun im Wesentlichen Seotweaks ist.

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

From the docs über die 'ours'-Strategie:

Dadurch wird eine beliebige Anzahl von Köpfen aufgelöst, aber der resultierende Baum der Zusammenführung ist immer der des aktuellen Zweigkopfs, wobei alle Änderungen aus allen anderen Zweigen effektiv ignoriert werden. Es soll verwendet werden, um die alte Entwicklungsgeschichte der Seitenzweige zu ersetzen. Beachten Sie, dass dies von der Option -Xours zur rekursiven Zusammenführungsstrategie abweicht.

2580
ergosys

Was ist mit git branch -m, um den Hauptzweig in einen anderen Zweig umzubenennen und dann seotweaks branch in master umzubenennen? Etwas wie das:

git branch -m master old-master
git branch -m seotweaks master
git Push -f Origin master

Dies könnte Commits im Origin-Master entfernen Bitte überprüfen Sie Ihren Origin-Master, bevor Sie git Push -f Origin master ausführen.

439
ZelluX

Sie können den Master auf der Fernbedienung umbenennen/entfernen. Dies ist jedoch ein Problem, wenn viele Benutzer ihre Arbeit auf der Remote-Master-Verzweigung basieren und diese Verzweigung in ihrem lokalen Repository gezogen haben.
Dies ist hier möglicherweise nicht der Fall, da anscheinend alle an Zweig 'seotweaks' arbeiten.

In diesem Fall können Sie:
git remote --show funktioniert möglicherweise nicht. (Machen Sie einen git remote show , um zu überprüfen, wie Ihre Fernbedienung in Ihrem lokalen Repo deklariert ist. Ich gehe von 'Origin' aus.)
(In Bezug auf GitHub, house9 Kommentar: "Ich musste einen zusätzlichen Schritt machen, auf die Schaltfläche 'Admin' bei GitHub klicken und '_Default Branch_' einstellen. zu etwas anderem als 'master', dann stelle es danach 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 Zugriffe fehl ("keine solche Referenz auf der Fernbedienung").
  • wenn der Master remote neu erstellt wird, versucht ein Pull, diesen neuen Master mit seinem lokalen (jetzt alten) Master zusammenzuführen: Viele Konflikte. Sie müssen ihren lokalen Master tatsächlich _reset --hard_ an den Remote-/Master-Zweig senden, den sie abrufen, und ihren aktuellen Master vergessen.
71
VonC

Da seotweaks ursprünglich als Zweig von master erstellt wurde, ist es eine gute Idee, ihn wieder zusammenzuführen. Wenn Sie sich jedoch in einer Situation befinden, in der eine Ihrer Niederlassungen nicht wirklich eine von master abweichende Niederlassung ist oder Ihre Historie so unterschiedlich ist, dass Sie nur die Zweigstelle master zugunsten der von Ihnen neu eingerichteten Zweigstelle auslöschen möchten Habe die Arbeit gemacht an der du das machen kannst:

git Push [-f] Origin seotweaks:master

Dies ist besonders hilfreich, wenn Sie diesen Fehler erhalten:

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

Und Sie verwenden GitHub nicht und haben keinen Zugriff auf die Registerkarte "Administration", um den Standardzweig für Ihr Remote-Repository 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
29
mholm815

Ich fand dies die beste Möglichkeit, dies zu tun (ich hatte ein Problem mit meinem Server, bei dem ich nicht löschen konnte).

Geben Sie auf dem Server, auf dem sich das Repository Origin befindet, in einem Verzeichnis im Repository Folgendes 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 Repository Origin hostet:

git config receive.denyDeleteCurrent true

Dank an den Autor des Blogposts http://www.mslinn.com/blog/?p=772

2
ScottGuymer