Hoe de laatste niet-gepushte git-commit ongedaan te maken zonder de wijzigingen te verliezen

Is er een manier om een commit terug te draaien zodat mijn lokale kopie behoudtde wijzigingen die in die commit zijn gemaakt, maar het worden niet-vastgelegde wijzigingen in mijn werkkopie? Als je een commit terugdraait, ga je naar de vorige commit – ik wil de gemaakte wijzigingen behouden, maar ik heb ze in de verkeerde branch vastgelegd.

Dit is niet gepusht, alleen vastgelegd.


Antwoord 1, autoriteit 100%

Er zijn veel manieren om dit te doen, bijvoorbeeld:

voor het geval je nietde commit nog openbaar hebt gepusht:

git reset HEAD~1 --soft   

Dat is het, je commit-wijzigingen zullen in je werkdirectory staan, terwijl de LAATSTE commit uit je huidige branch zal worden verwijderd. Zie git reset man


In het geval dat je deedpubliekelijk gepusht hebt (op een branch genaamd ‘master’):

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to dig it from reflog in case you screw up :) )

keer commit normaal terug en druk op

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this introduces a new commit (say, it's hash is 86b48ba) which removes changes, introduced in the commit in question (but those changes are still visible in the history)
git push origin master

als je die wijzigingen nu wilt hebben als lokale wijzigingen in je werkkopie (“zodat je lokale kopie de wijzigingen die in die commit zijn gemaakt behoudt”) – draai gewoon de revert-commit terug met --no-commitoptie:

git revert --no-commit 86b48ba (hash of the revert commit).

Ik heb een klein voorbeeld gemaakt: https://github.com/Isantipov/ git-revert/commits/master


Antwoord 2

Als je de wijzigingen hebt gepusht, kun je deze undoen de bestanden terug naar stage verplaatsen zonder een andere branch te gebruiken.

git show HEAD > patch
git revert HEAD
git apply patch

Het zal een patch-bestand maken dat de laatste branch-wijzigingen bevat. Vervolgens worden de wijzigingen ongedaan gemaakt. En tot slot, pas de patch-bestanden toe op de werkboom.


Antwoord 3

Voor het geval: “Dit is niet gepusht, alleen vastgelegd.” – als je IntelliJ(of een andere JetBrains IDE) gebruikt en je hebt nog geen wijzigingen doorgevoerd, kun je het volgende doen.

  1. Ga naar het versiebeheervenster (Alt + 9/Command + 9) – tabblad “Log”.
  2. Klik met de rechtermuisknop op een commit voor je laatste.
  3. Reset huidige vertakking naar hier
  4. kies Zacht(!!!)
  5. druk op de Reset-knop onder in het dialoogvenster.

Gereed.

Dit zal je wijzigingen “uncommit” en je git-status terugbrengen naar het punt voor je laatste lokale commit. U verliest geen wijzigingen die u heeft aangebracht.


Antwoord 4

Bij mij gebeurt het meestal wanneer ik wijzigingen naar de verkeerde branch push en later realiseer. En volgen werkt meestal.

git revert commit-hash
git push
git checkout my-other-branch
git revert revert-commit-hash
git push
  1. de commit terugdraaien
  2. (maak en) betaal een ander filiaal
  3. het terugzetten

Antwoord 5

2020 eenvoudige manier:

git reset <commit_hash>

Commit hash van de laatste commit die je wilt behouden.


Antwoord 6

Zorg ervoor dat u een back-up van uw wijzigingen maakt voordat u deze opdracht in een aparte map uitvoert

git checkout branch_name

Afrekenen in uw filiaal

git merge –abort

Samenvoeging afbreken

git-status

Controleer de status van de code na het afbreken van de samenvoeging

git reset –hard origin/branch_name

deze opdracht zal uw wijzigingen resetten en uw code uitlijnen met de branch_name (branch) code.


Antwoord 7

Stappen toevoegen die ik heb gevolgd in de hoop dat het nuttig is voor een beginner zoals ik.

De volgende afbeelding toont de commits die ik al naar de remote branch ‘A‘ in bitbucket heb gepusht.

Van deze 5 commits wil ik de laatste 2 behouden zoals ze zijn, maar de eerste 3 commits wil ik dat ze naar een andere branch ‘B‘ worden gepusht.

Dit zijn de stappen die ik heb gevolgd:

Binnen filiaal ‘A‘:

  1. git revert <commit-hash>voor elk van de 3 commits. Als voorbeeld, d4a3734is de commit-hash van de laatste commit in de afbeelding. (Als je wilt, kun je meerdere commits tegelijk terugdraaien – zie Hoe meerdere git-commits terug te draaien? )
  2. git push

Na de push zag het er zo uit:-

Nu, ik heb alleen de eerste 2 commits in mijn filiaal ‘a ‘, wat ik wilde. Verzoek naar de tak gezocht. Als het een nieuwe tak is, gebruik dan git checkout -b <branchname>. In mijn geval deed ik git checkout B.

Inside Branch ‘B ‘:

Ik heb eenvoudigweg de commits gekozen die ik wilde vertakken ‘b ‘. In mijn zaak deed ik:

git cherry-pick <commit-hash> 

Voor die 3 commits die ik heb teruggekeerd.

(Nogmaals, als voorbeeld, git cherry-pick d4a3734Waar D4A3734 is de plegen Hash van de laatste commit op de foto)

Other episodes