Mogelijk duplicaat:
Maak van de huidige Git branch een master branch
Ik heb twee branches in mijn Git repository:
master
seotweaks
(oorspronkelijk gemaakt van master
)Ik heb seotweaks
aangemaakt met de bedoeling om het snel weer samen te voegen in master
. Echter, dat was drie maanden geleden en de code in deze branch ligt 13 versies voor op master
.
Het is effectief onze werkende master branch geworden, omdat alle code in master
nu min of meer verouderd is.
Slechte praktijk, ik weet het, les geleerd.
Weet je hoe ik de hele inhoud van de master
branch kan vervangen door die in seotweaks
?
Ik zou gewoon alles in master
kunnen verwijderen en samenvoegen, maar dit voelt niet als de beste werkwijze.
Je zou de "ours" merge strategie moeten kunnen gebruiken om master te overschrijven met seotweaks zoals deze:
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
Het resultaat zou moeten zijn dat je master nu in essentie seotweaks is.
(-s ours
is een afkorting voor --strategie=ons
)
Uit de docs over de 'ours' strategie:
Dit lost een willekeurig aantal koppen op, maar de resulterende boom van de samenvoeging is altijd die van de huidige kop van de tak, waarbij effectief alle wijzigingen van alle andere takken worden genegeerd. Het is bedoeld om gebruikt te worden om oude ontwikkelgeschiedenis van zijtakken te vervangen. Merk op dat dit anders is dan de -Xours optie voor de recursieve samenvoegstrategie.
Update van commentaar: Als je de fatale melding krijgt: weigert ongerelateerde geschiedenissen samen te voegen
, verander dan de tweede regel in deze: git merge --allow-unrelated-histories -s ours master
Wat dacht je van git branch -m gebruiken om de master branch naar een andere te hernoemen, en dan seotweaks branch naar master hernoemen? Zoiets als dit:
git branch -m master old-master
git branch -m seotweaks master
git push -f origin master
Dit zou commits in origin master kunnen verwijderen, controleer alsjeblieft je origin master voordat je git push -f origin master
uitvoert.
Je kunt master op remote hernoemen/verwijderen, maar dit zal een probleem zijn als veel mensen hun werk gebaseerd hebben op de remote master branch en die branch naar hun lokale repo getrokken hebben.
Dat zou hier niet het geval kunnen zijn, aangezien iedereen lijkt te werken aan branch 'seotweaks
'.
In dat geval kun je:
git remote --show misschien niet werken.
(Maak een git remote show
om te controleren hoe je remote is gedeclareerd binnen je lokale repo. Ik zal uitgaan van 'origin
')
(Met betrekking tot GitHub, house9 commentaar: "Ik moest een extra stap doen, klik op de 'Admin
' knop op GitHub en zet de 'Default Branch
' op iets anders dan 'master
', en zet het daarna weer terug")
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
Maar nogmaals:
resetten --hard
naar de remote/master branch die ze gaan fetchen, en hun huidige master vergeten.