Hoe maak je ‘git reset’ ongedaan?

Wat is de eenvoudigste manier om ongedaan te maken:

git reset HEAD~

Momenteel is de enige manier die ik kan bedenken het doen van een git clone http://...vanaf een externe opslagplaats.


Antwoord 1, autoriteit 100%

Kort antwoord:

git reset 'HEAD@{1}'

Lang antwoord:

Git houdt een logboek bij van alle ref-updates (bijv. afrekenen, resetten, vastleggen, samenvoegen). Je kunt het bekijken door te typen:

git reflog

Ergens in deze lijst staat de commit die je bent kwijtgeraakt. Laten we zeggen dat je zojuist git reset HEAD~hebt getypt en dit ongedaan wilt maken. Mijn reflog ziet er als volgt uit:

$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]

De eerste regel zegt dat HEAD0 posities geleden (met andere woorden, de huidige positie) 3f6db14 is; het werd verkregen door te resetten naar HEAD~. De tweede regel zegt dat HEAD1 positie geleden (met andere woorden, de toestand vóór de reset) d27924e is. Het werd verkregen door een bepaalde commit te bekijken (hoewel dat nu niet belangrijk is). Dus, om de reset ongedaan te maken, voer je git reset HEAD@{1}(of git reset d27924e) uit.

Als je aan de andere kant een aantal andere commando’s hebt uitgevoerd sinds die update HEAD, zal de gewenste commit niet bovenaan de lijst staan, en moet je door de reflog.

Nog een laatste opmerking: het is misschien makkelijker om naar de reflogte kijken voor de specifieke branch die je wilt terugzetten, bijvoorbeeld master, in plaats van HEAD:

$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]

Dit zou minder ruis moeten bevatten dan de algemene HEAD reflog.


Antwoord 2, autoriteit 9%

Oude vraag, en de geposte antwoorden werken prima. Ik zal wel een andere optie bedenken.

git reset ORIG_HEAD

ORIG_HEADverwijst naar de commit waar HEADeerder naar verwees.


Antwoord 3, autoriteit 3%

Mijn situatie was iets anders, ik heb git reset HEAD~drie keer gedaan.

Ik moest het ongedaan maken

git reset HEAD@{3}

dus je zou het moeten kunnen

git reset HEAD@{N}

Maar als je git reset hebt gedaan met

git reset HEAD~3

u zult moeten doen

git reset HEAD@{1}

{N}staat voor het aantal bewerkingen in reflog, zoals Mark opmerkte in de opmerkingen.


Antwoord 4

1.Gebruik git reflogom alle referenties te updaten.

2.git reset <id_of_commit_to_which_you_want_restore>

Other episodes