Undo Git Stash POP die resulteert in het samenvoegen Conflict

Ik begon veranderingen aan te brengen in mijn codebase, niet realiseerde dat ik op een oude onderwerptak was. Om ze over te brengen, wilde ik ze stakken en breng ze vervolgens aan op een nieuwe tak van de meester. Ik gebruikte git stash popom veranderingen door het werk in voort te zetten in deze nieuwe tak, vergeten dat ik geen nieuwe veranderingen in de meester had getrokken voordat ik de nieuwe tak maakte. Dit resulteerde in een stel samenvoegconflicten en verlies van een schone stash van mijn veranderingen (sinds ik POP heb gebruikt).

Zodra ik de nieuwe tak correct recreëren, hoe kan ik mijn versterkingswijzigingen herstellen om ze goed toe te passen?


Antwoord 1, Autoriteit 100%

Zoals het blijkt, is Git slim genoeg om geen stash te laten vallen als het niet netjes toepast. Ik kon bij de volgende stappen naar de gewenste staat komen:

  1. Om de samenvoegconflicten te verenigen: git reset HEAD .(Let op de sleepdot)
  2. om de conflicterende samenvoeging op te slaan (alleen in het geval): git stash
  3. Terugkeren naar Master: git checkout master
  4. om de laatste wijzigingen te trekken: git fetch upstream; git merge upstream/master
  5. Om mijn nieuwe filiaal te corrigeren: git checkout new-branch; git rebase master
  6. Om de juiste gegestoorde wijzigingen toe te passen (nu 2e op de stapel): git stash apply stash@{1}
  7. toe


Antwoord 2, Autoriteit 53%

Gelukkig git stash popdoet niet verander de voorraad in het geval van een conflict!

Dus niets, om je zorgen over te maken, maak je je code schoon en probeer het opnieuw.

Zeg dat uw codebase eerder schoon was, u zou terug kunnen gaan naar die staat met: git checkout -f
Doe dan de dingen die je bent vergeten, b.v. git merge missing-branch
Daarna gewoon opnieuw git stash popafvuren en je krijgt de dezelfdestash, die eerder in conflict was.

Houd er rekening mee: de stash is veilig, maar niet-vastgelegdewijzigingen in de werkdirectory zijn dat natuurlijk niet. Ze kunnen in de war raken.


Antwoord 3, autoriteit 4%

De instructies hier zijn een beetje ingewikkeld, dus ik ga iets meer rechttoe rechtaan aanbieden:

  1. git reset HEAD --hardLaat alle wijzigingen aan de huidige branch los

  2. ...Voer indien nodig intermediair werk uit

  3. git stash popPop de stash opnieuw op een later tijdstip wanneer je klaar bent


Antwoord 4, autoriteit 4%

git checkout -f

moet werken, als je vorige staat schoon is.


Antwoord 5, autoriteit 2%

git reset --merge

Eenvoudigste opdracht & werkt overal incl. git stash pop.

Pas op! Alle wijzigingen in niet-getrackte bestanden gaan verloren.

Other episodes