Toon posts:

Git branches met niet-matchende histories fixen

Pagina: 1
Acties:

Vraag


  • Oon
  • Registratie: Juni 2019
  • Niet online
Ik heb als 'erfenis' een git repository gekregen met daarin twee branches. Laten we ze voor het gemak even productie en development noemen.
In 2017 is development geforkt van productie, tot 2017 loopt de history dus gelijk.

Daarna zijn tussen 2017 en nu zo'n 1500 commits gedaan op productie, voornamelijk bugfixes.
Helaas is er voor gekozen om die commits niet te mergen/cherrypicken of development te fast-forwarden, maar dezelfde wijzigingen los toe te passen. Resultaat is dus dubbele commits met een eigen hash.

Op dezelfde manier zijn er wijzigingen van development naar productie en van productie naar development gekopiëerd. Dit zijn zowel wijzigingen als bestanden die zijn verwijderd.

Het eindresultaat is dat de histories vanaf 2017 dus niet meer matchen. Bij een merge gaat een deel goed, maar er blijven zo'n 900 merge conflicts over, veelal wijzigingen die dus al zijn toegepast.

De wijzigingen zijn 1:1 hetzelfde, met dezelfde commit message, vaak zelfs binnen enkele minuten van elkaar, alleen een andere hash. Ook is het doel om de history van development gelijk te trekken aan productie, dus in principe een kwestie van 'overal rechts', maar ook dit krijg ik niet voor elkaar. Gezien de vele conflicts loopt menig merge tool volledig vast.

Is er een manier om dit op te lossen? Is er een tool die bijvoorbeeld deze commits kan vergelijken, en ondanks dat de hash niet gelijk is kan zien dat ze wel bij elkaar horen, in feite dus mergen zonder naar commit hashes te kijken?

Het enige dat ik heb gevonden/geprobeerd zijn de normale processen, dus mergen of rebasen. In alle gevallen krijg ik die honderden merge conflicts, die wil ik graag automatisch oplossen, maar daarover kan ik helemaal geen informatie vinden.

Alle reacties


  • keken
  • Registratie: December 2003
  • Laatst online: 23:05
Kan je niet beter een nieuwe develop branch maken vanaf master? Eventueel cherry pick je dan nog wijzigingen vanaf de oude develop branch naar de nieuwe.

[Voor 4% gewijzigd door keken op 09-02-2022 07:57]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

https://stackoverflow.com...rsion-of-git-merge-s-ours

code:
1
2
git checkout development
git merge -X theirs production

I have these thoughts / so often I ought / to replace that slot / with what I once bought / 'cause somebody stole my car radio / and now I just sit in silence


  • Oon
  • Registratie: Juni 2019
  • Niet online
keken schreef op woensdag 9 februari 2022 @ 07:57:
Kan je niet beter een nieuwe develop branch maken vanaf master? Eventueel cherry pick je dan nog wijzigingen vanaf de oude develop branch naar de nieuwe.
Development loopt flink wat voor op productie, dus dan zouden we inderdaad alsnog flink wat moeten cherrypicken. Helaas niet een keuze die ik zomaar kan maken, maar dat zou als het niet anders kan wel een optie zijn

  • 418O2
  • Registratie: November 2001
  • Laatst online: 13-09-2022
Production renamen naar production_legacy, nieuwe production/main branch forken vanaf develop.

Burning bridges. Waarom zou je al die moeite doen? Als je develop branch klopt zou ik daar vanaf verder gaan

  • Oon
  • Registratie: Juni 2019
  • Niet online
418O2 schreef op woensdag 9 februari 2022 @ 08:21:
Production renamen naar production_legacy, nieuwe production/main branch forken vanaf develop.

Burning bridges. Waarom zou je al die moeite doen? Als je develop branch klopt zou ik daar vanaf verder gaan
Als het mijn eigen persoonlijke repository was had ik dat gedaan, maar in dit geval zoek ik toch echt een oplossing om het binnen de bestaande branches te doen :'(

  • 418O2
  • Registratie: November 2001
  • Laatst online: 13-09-2022
Oon schreef op woensdag 9 februari 2022 @ 08:40:
[...]

Als het mijn eigen persoonlijke repository was had ik dat gedaan, maar in dit geval zoek ik toch echt een oplossing om het binnen de bestaande branches te doen :'(
Ik heb ditzelfde niet lang geleden ook gehad, ik wou mijn vingers niet branden aan mogelijk verschillen... De defenitie van "gelijke commits" is bijvoorbeeld al interpretatie.

  • Oon
  • Registratie: Juni 2019
  • Niet online
Dit nu net geprobeerd (maar dan ours ipv theirs) en daarmee hou ik nog zo'n 400 conflicts over, maar dat lijken bijna allemaal deletions te zijn die aan beide kanten worden gedaan of commits in bestanden die blijkbaar daarna ook zijn verwijderd..

Scheelt in ieder geval al meer dan de helft :)

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Ik zou één branch squashen naar één commit bovenop de shared parent en die dan mergen. Dan ben je alle tussenliggende conflicten kwijt.

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 02-02 15:30
eamelink schreef op woensdag 9 februari 2022 @ 08:50:
Ik zou één branch squashen naar één commit bovenop de shared parent en die dan mergen. Dan ben je alle tussenliggende conflicten kwijt.
Dit kun je trouwens in één keer doen met git merge --squash [branch].
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee