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 pop
om 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:
- Om de samenvoegconflicten te verenigen:
git reset HEAD .
(Let op de sleepdot) - om de conflicterende samenvoeging op te slaan (alleen in het geval):
git stash
- Terugkeren naar Master:
git checkout master
- om de laatste wijzigingen te trekken:
git fetch upstream; git merge upstream/master
- Om mijn nieuwe filiaal te corrigeren:
git checkout new-branch; git rebase master
- Om de juiste gegestoorde wijzigingen toe te passen (nu 2e op de stapel):
git stash apply stash@{1}
toe
Antwoord 2, Autoriteit 53%
Gelukkig git stash pop
doet 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 pop
afvuren 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:
-
git reset HEAD --hard
Laat alle wijzigingen aan de huidige branch los -
...
Voer indien nodig intermediair werk uit -
git stash pop
Pop 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.