Hoe een lokale git-commit te annuleren

Mijn probleem is dat ik een bestand heb gewijzigd, bijvoorbeeld: Readme, voegde een nieuwe regel ‘toe voor mijn testlijn ‘ en opgeslagen het bestand, vervolgens gaf ik de volgende opdrachten

git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   README
#
no changes added to commit (use "git add" and/or "git commit -a")
git add README
git commit -a -m 'To add new line to readme'

Ik heb de code niet ingedrukt naar GitHub, nu wil ik deze commit annuleren.

Hiervoor gebruikte ik

git reset --hard HEAD~1

Maar ik verloor de nieuw toegevoegde regel ‘dit voor mijn testlijn ‘ van het README-bestand.
Dit zou niet moeten gebeuren. Ik heb de inhoud nodig om er te zijn. Is er een manier om de inhoud te behouden en mijn lokale commit te annuleren?


Antwoord 1, Autoriteit 100%

Gebruik gewoon git resetzonder de --hardVLAG:

git reset HEAD~1

PS: op Unix-gebaseerde systemen kunt u HEAD^gebruiken die gelijk is aan HEAD~1. Op Windows HEAD^werkt niet omdat ^een lijnvoortzetting signaleert. Dus uw opdrachtprompt vraagt ​​u gewoon More?.


Antwoord 2, Autoriteit 14%

Gebruik --softin plaats van --hardVLAG:

git reset --soft HEAD^

Het verwijdert de laatste lokale (PUSEDED) commit, maar blijft veranderingen die u hebt gedaan.


Antwoord 3, Autoriteit 3%

Als u midden in een commit staat (d.w.z. in uw editor reeds), kunt u deze annuleren door alle regels boven de eerste #te verwijderen. Dat zal de commit afbreken.

Je kunt dus alle regels verwijderen zodat het commit-bericht leeg is, en sla dan het bestand op:

Je krijgt dan een bericht met de tekst Aborting commit due to empty commit message..


Antwoord 4, autoriteit 2%

Het eerste dat u moet doen, is bepalen of u de lokale wijzigingen wilt behouden voordat u het vastleggingsbericht verwijdert.

Gebruik git logom huidige commit-berichten te tonen, zoek dan de commit_idvoorde commit die je wilt verwijderen, niet de commit die je wilt verwijderen.

Als je de lokaal gewijzigde bestanden wilt behouden en gewoon het commit-bericht wilt verwijderen:

git reset --soft commit_id

Als je alle lokaal gewijzigde bestanden en het commit-bericht wilt verwijderen:

git reset --hard commit_id

Dat is het verschil tussen zachten hard


Antwoord 5

Je kunt Git vertellen wat te doen met je index (set van bestanden die de volgende commit zal worden) en werkdirectory bij het uitvoeren van git reset door een van de parameters te gebruiken:

--soft: Alleen commits worden gereset, terwijl Index en de werkdirectory niet worden gewijzigd.

--mixed: Dit zal de index opnieuw instellen zodat deze overeenkomt met de HEAD, terwijl de werkdirectory niet wordt aangeraakt. Alle wijzigingen blijven in de werkmap en verschijnen als gewijzigd.

--hard: het reset alles (commits, index, werkmap) zodat het overeenkomt met de HEAD.

In jouw geval zou ik git reset --softgebruiken om je gewijzigde wijzigingen in Index en werkdirectory te bewaren. Zorg ervoor dat je dit bekijktvoor een meer gedetailleerde uitleg.


Antwoord 6

Gebruik onderstaande opdracht:

$ git reset HEAD~1

Hierna kunt u ook bestanden bekijken die teruggaan zoals onderstaande reactie.

Unstaged changes after reset:
M   application/config/config.php
M   application/config/database.php

Other episodes