border=0

"46.45.5.86 - 46.45.5.86"

Hoe de Git-repository terug te zetten naar de vorige commit

Hoe kan ik terugkeren van de huidige status naar een momentopname genomen op een specifieke fix?

Als ik git log , krijg ik de volgende output:

 $ git log commit a867b4af366350be2e7c21b8de9cc6504678a61b' Author: Me <me@me.com> Date: Thu Nov 4 18:59:41 2010 -0400 blah blah blah... commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4 Author: Me <me@me.com> Date: Thu Nov 4 05:13:39 2010 -0400 more blah blah blah... commit 0766c053c0ea2035e90f504928f8df3c9363b8bd Author: Me <me@me.com> Date: Thu Nov 4 00:55:06 2010 -0400 And yet more blah blah... commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50 Author: Me <me@me.com> Date: Wed Nov 3 23:56:08 2010 -0400 Yep, more blah blah. 

Hoe terug te keren naar fixatie vanaf 3 november, d.w.z. om 0d1d7fc te herstellen?

6500
06 нояб. ingesteld door Crazy Serb 06 nov. 2010-11-06 19:58 '10 om 19:58 2010-11-06 19:58
ответ 41 antwoorden
  • 1
  • 2

Het hangt erg af van wat je bedoelt met "terugdraaien".

Tijdelijk overschakelen naar een andere fix.

Als je er tijdelijk naar toe wilt, jezelf bedriegt en dan terugkeert naar waar je bent, hoef je alleen maar de gewenste fixatie te controleren:

 # This will create three separate revert commits: git revert a867b4af 25eee4ca 0766c053 # It also takes ranges. This will revert the last two commits: git revert HEAD~2..HEAD #Similarly, you can revert a range of commits using commit hashes: git revert a867b4af..0766c053 # Reverting a merge commit git revert -m 1 <merge_commit_sha> # To get just one, you could use 'rebase -i' to squash them afterwards # Or, you could do it manually (be sure to do this at top level of the repo) # get your index and work tree into the desired state, without changing HEAD: git checkout 0d1d7fc32 . # Then commit. Be sure and write a good message describing what you just did git commit 

git-revert manpage dekt hier echt veel van in de beschrijving. Een andere nuttige link is de sectie git-scm.com, waarin git-revert wordt besproken .

Als u besluit dat u niet aan het einde wilt terugkeren, kunt u het omgekeerde retourneren (zoals hier beschreven) of terugkeren voordat u terugkeert (zie het vorige gedeelte).

U vindt dit antwoord misschien ook nuttig in dit geval:
Hoe HEAD terug naar de vorige plaats te brengen? (Gescheiden hoofd)

8356
06 нояб. Het antwoord wordt gegeven door Cascabel 06 nov. 2010-11-06 20:04 '10 om 20:04 2010-11-06 20:04

Retourneer een werkkopie naar de laatste commit

Om terug te keren naar de vorige commit en alle wijzigingen te negeren:

 git reset --hard HEAD 

waar HEAD is de laatste oplossing in je huidige thread.

Een werkkopie retourneren naar een oudere commit

Om terug te gaan naar commit, wat groter is dan de laatste commit:

1396
21 авг. boulder_ruby antwoord is 21 augustus 2012-08-21 09:19 '12 om 9:19 21-08-2012 09:19

Er zijn veel moeilijke en gevaarlijke antwoorden, maar in feite is het eenvoudig:

 git revert --no-commit 0766c053..HEAD git commit 

Hierdoor wordt alles geretourneerd van HEAD naar de hash commit, wat betekent dat het deze commit-status in de werkboom opnieuw creëert, alsof elke commit sindsdien is geretourneerd. Vervolgens kunt u de huidige structuur herstellen en een geheel nieuwe fix maken, grotendeels gelijk aan de fix, die u hebt "geretourneerd".

(Met de vlag --no-commit kan git alle commits tegelijkertijd terugzenden - anders wordt je gevraagd om een ​​bericht te sturen voor elke commit in het bereik, waarbij je je geschiedenis overspoelt met onnodige nieuwe commits.)

Dit is een veilige en gemakkelijke manier om terug te keren naar een vorige staat . Geen geschiedenis wordt vernietigd, dus het kan worden gebruikt voor commits die al zijn gepubliceerd.

1361
12 февр. Het antwoord wordt gegeven door Yarin op 12 februari. 2014-02-12 07:18 '14 om 07:18 uur 2014-02-12 07:18 uur

De beste optie voor mij en misschien voor anderen is de Git-resetoptie:

 git reset --hard <commidId>  git clean -f 

Het was de beste optie voor mij! Het is eenvoudig, snel en efficiënt!


Opmerking: zoals vermeld in de opmerkingen, doe dit niet als u uw kantoor deelt met andere mensen die kopieën van oude commits hebben.

Ook uit de opmerkingen, als u de minder "ballzy" -methode wilt gebruiken, kunt u gebruiken

git clean -i

173
22 окт. Het antwoord wordt gegeven door Pogrindis op 22 oktober. 2013-10-22 14:53 '13 om 14:53 2013-10-22 14:53

Voeg voor het beantwoorden een beetje achtergrond toe en leg uit wat HEAD .

First of all what is HEAD?

HEAD is eenvoudigweg een verwijzing naar de huidige commit (laatste) in de huidige thread. Op elk moment kan er maar één HEAD (exclusief git worktree ).

HEAD inhoud wordt opgeslagen in .git/HEAD en bevat 40 bytes van SHA-1 van de huidige commit.


detached HEAD

Als u de laatste commit niet gebruikt, betekent dit dat de HEAD de vorige commit in de geschiedenis aangeeft, dit wordt de detached HEAD .

2019

06 февр. Het antwoord is CodeWizard 06 feb. 2015-02-06 00:56 '15 om 0:56 2015-02-06 00:56

Als je wilt overklokken, het laatste commit-bericht wilt wissen en de gewijzigde bestanden in de wachtrij wilt plaatsen, moet je de volgende opdracht gebruiken:

 git reset --soft HEAD~1 
  • --soft geeft aan dat ontgrendelde bestanden moeten worden opgeslagen als werkbestanden, in tegenstelling tot --hard , die ze verwijderen.
  • HEAD~1 - laatste oplossing. Als u 3 fixes wilt terugdraaien, kunt u HEAD~3 . Als u terug wilt naar een specifiek revisienummer, kunt u dit ook doen met uw SHA-hash.

Dit is een uiterst nuttig commando in situaties waar je het verkeerde deed, en je wilt deze laatste commit annuleren.

Bron: http://nakkaya.com/2009/09/24/git-delete-last-commit/

116
04 марта '14 в 20:25 2014-03-04 20:25 Antwoord wordt gegeven door Stephen Ostermiller op 04 maart '14 om 20:25 uur 2014-03-04 20:25

Ik heb op veel manieren geprobeerd om lokale wijzigingen in Git ongedaan te maken, en het lijkt erop dat het het beste werkt als je gewoon terug wilt naar de laatste commit-status.

 git add .  git checkout master -f 

Korte beschrijving:

  • Het zal geen commits creëren, zoals git revert .
  • Het maakt je HEAD niet los als git checkout <commithashcode> .
  • Het overschrijft alle lokale wijzigingen en verwijdert alle toegevoegde bestanden sinds de laatste commit in de thread.
  • Het werkt alleen met de namen van de takken, dus je kunt op deze manier alleen terugkeren naar de laatste commit in de branch.

Ik vond een veel handigere en eenvoudigere manier om de bovenstaande resultaten te behalen:

 git add .  git reset --hard HEAD 

waarbij HEAD de laatste commit in je huidige thread aangeeft.

Dit is dezelfde code als boulder_ruby, maar ik heb git add . toegevoegd git add . before git reset --hard HEAD om alle nieuwe bestanden te wissen die gemaakt zijn sinds de laatste commit, omdat dit is wat de meeste mensen verwachten wanneer ik terug ga naar de laatste commit.

104
29 июля '12 в 14:01 2012-07-29 14:01 het antwoord wordt gegeven door Roman Minenok 29 juli '12 om 14:01 uur 2012-07-29 14:01

U kunt dit doen met de volgende twee opdrachten:

 git reset --hard [previous Commit SHA id here] git push origin [branch Name] -f 

Het zal de vorige Git-fix verwijderen.

Als u uw wijzigingen wilt opslaan, kunt u ook het volgende gebruiken:

 git reset --soft [previous Commit SHA id here] 

Dan slaat het uw wijzigingen op.

90
12 дек. Het antwoord is kiran boghra 12 dec. 2014-12-12 09:52 '14 om 9:52 AM 2014-12-12 09:52

Laten we zeggen dat je de volgende commits hebt in een tekstbestand met de naam ~/commits-to-revert.txt (ik heb git log --pretty=oneline gebruikt om ze te krijgen)

 fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219 0c27ecfdab3cbb08a448659aa61764ad80533a1b f85007f35a23a7f29fa14b3b47c8b2ef3803d542 e9ec660ba9c06317888f901e3a5ad833d4963283 6a80768d44ccc2107ce410c4e28c7147b382cd8f 9cf6c21f5adfac3732c76c1194bbe6a330fb83e3 fff2336bf8690fbfb2b4890a96549dc58bf548a5 1f7082f3f52880cb49bc37c40531fc478823b4f5 e9b317d36a9d1db88bd34831a32de327244df36a f6ea0e7208cf22fba17952fb162a01afb26de806 137a681351037a2204f088a8d8f0db6e1f9179ca 

Maak een bash- shell-script om elk van hen terug te sturen:

55
14 окт. het antwoord wordt gegeven door Lance Caraccioli 14 okt. 2011-10-14 00:51 '11 om 0:51 2011-10-14 00:51

Extra alternatieven voor Jefromi Solutions

Jefromi-oplossingen zijn absoluut de beste en u moet ze zeker gebruiken. Voor de volledigheid wilde ik echter ook deze andere alternatieve oplossingen laten zien die ook kunnen worden gebruikt om een ​​commit terug te zetten (in de zin dat je een nieuwe commit maakt die wijzigingen in de vorige commit terugdraait, zoals git revert doet).

Voor de duidelijkheid, deze alternatieven zijn niet de beste manier om de oplossing te vinden , Jefromi-oplossingen , maar ik wil er alleen op wijzen dat je deze andere methoden ook kunt gebruiken om hetzelfde niveau te bereiken als git revert .

Alternatief 1: harde en zachte reset

Is dit een enigszins gemodificeerde versie van de oplossing van Charles Bailey om SHA-hash terug te geven aan Git? :

53
29 июня '14 в 20:51 2014-06-29 20:51 het antwoord wordt gegeven door user456814 29 juni '14 om 20:51 20-06-2014 20:51

Niets werkte hier voor mij behalve deze exacte combinatie:

 git reset --hard <commit_hash> git push origin <branch_name> --force 

De sleutel hier is geforceerd duwen, geen extra berichten over bevestigen / bevestigen, etc.

53
13 февр. het antwoord wordt serdarsenay 13 feb gegeven . 2018-02-13 01:40 '18 om 1:40 2018-02-13 01:40

Hier is een veel eenvoudigere manier om terug te gaan naar de vorige commit (en deze in onbeheerde staat te hebben, doe er dan mee wat je maar wilt):

 git reset HEAD~1 

Het is dus niet nodig om identifiers te repareren, etc. :)

50
29 февр. antwoord gegeven door Paul Walczewski op 29 februari 2016-02-29 11:40 '16 om 11:40 2016-02-29 11:40

Ok, terug naar de vorige commit in git is vrij eenvoudig ...

Terugzetten zonder wijzigingen op te slaan :

 git reset --hard <commit> 

Ga terug en sla de wijzigingen op:

 git reset --soft <commit> 

Leg uit dat je met git reset je kunt resetten naar een specifieke staat, meestal met een hekje aan commits, zoals je hierboven hebt gezien.

Maar, zoals je ziet, het verschil zit in het gebruik van de twee vlaggen --soft en --soft , de standaard is git reset met de --soft vlag, maar het is altijd aan te raden om deze vlag te gebruiken, ik leg elke vlag uit:


--soft

De standaardmarkering, zoals uitgelegd, vereist deze niet, verandert de werkboom niet, maar voegt alle wijzigingsbestanden toe die gereed zijn om te worden vastgelegd, dus keert u terug naar de commit-status, waarin de bestandswijzigingen ongewijzigd blijven.


--hard

Wees voorzichtig met deze vlag, het reset de werkende boom en alle veranderingen in de bewaakte bestanden verdwijnen!


Ik heb ook een afbeelding hieronder gemaakt die in het echte leven kan gebeuren tijdens het werken met git:

2019

Er vanuit gaande dat u het over de gastheer en in de juiste branche hebt (dit suggereert dat het een willekeurige bedrijfstak kan zijn waar u zich zorgen over maakt):

 # Revert local master branch to November 3rd commit ID git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50 # Revert remote master branch to November 3rd commit ID git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master 

Ik vond het antwoord van de blogpost Verwijder een remote git repository voor een specifieke commit .

45
10 мая '16 в 20:21 2016-05-10 20:21 antwoord gegeven aan markreyes op 10 mei 16 om 20:21 2016-05-10 20:21

Na alle wijzigingen, wanneer u op al deze opdrachten drukt, moet u mogelijk het volgende gebruiken:

 git push -f ... 

En niet alleen git push .

34
05 сент. het antwoord wordt gegeven door sivi 05 sep . 2013-09-05 17:03 '13 om 17:03 2013-09-05 17:03

Er is een commando (geen onderdeel van de Git-kernel, maar het is in het pakket git-extras ) speciaal voor het retourneren en uitvoeren van oude commits:

 git back 

Op de man- pagina kan het ook als zodanig worden gebruikt:

 # Remove the latest three commits git back 3 
32
08 авг. het antwoord wordt gegeven door Shadow Man 08 aug. 2013-08-08 21:30 '13 om 21:30 2013-08-08 21:30

Ga terug naar de laatste commit en negeer alle lokale wijzigingen:

 git reset --hard HEAD 
27
26 июля '16 в 16:13 2016-07-26 16:13 Antwoord wordt gegeven door Mohammed Irfan Tirupattur op 26 juli '16 om 16:13 2016-07-26 16:13

Selecteer de gewenste houder en controleer deze.

 git show HEAD git show HEAD~1 git show HEAD~2 

totdat je de gewenste fixatie hebt. Om HEAD te dwingen dit te wijzen, doe

 git reset --hard HEAD~1 

of git reset --hard HEAD~2 of iets anders.

26
26 февр. het antwoord is gegeven tonythomas01 26 feb. 2014-02-26 15:52 '14 om 15:52 2014-02-26 15:52

Je kunt al deze eerste stappen zelf voltooien en teruggaan naar git-repo.

  1. Trek de laatste versie van je repository uit Bitbucket met de opdracht git pull --all .

  2. Voer de opdracht git log met -n 4 uit vanaf uw terminal. Het getal na -n bepaalt het aantal commits in het logboek, te beginnen met de laatste commit in uw lokale geschiedenis.

    $ git log -n 4

  3. Reset git reset --hard HEAD~N geschiedenis van je repository met git reset --hard HEAD~N waarbij N het aantal commits is dat je wilt terugzetten. In het volgende voorbeeld wordt de kop ingesteld op één commit, de laatste commit in de geschiedenis van de repository:

  4. Klik op een wijziging in git repo met git push --force om een ​​wijziging af te dwingen.

Als je wilt dat de git repository een vorige commit heeft

 git pull --all git reset --hard HEAD~1 git push --force 
24
06 апр. antwoord gegeven door Nanhe Kumar 06 april 2017-04-06 15:20 17 om 15:20 2017-04-06 15:20

Dit is een andere directe reset-methode voor recente commit.

 git stash git stash clear 

Hiermee worden alle wijzigingen die u hebt aangebracht sinds de laatste commit direct gewist.

PS: hij heeft een klein probleempje; het verwijdert ook alle recent opgeslagen cache-wijzigingen. Ik denk dat het in de meeste gevallen niet uitmaakt.

20
05 мая '16 в 14:43 2016-05-05 14:43 het antwoord wordt gegeven door Point Networks 05 mei '16 om 14:43 uur 2016-05-05 14:43

Om de coderingsdirectory van enkele willekeurige wijzigingen volledig te wissen, gebruikten we:

 git add -A . git reset --hard HEAD 

Just git reset --hard HEAD de wijzigingen verwijderen, maar het zal de "nieuwe" bestanden niet kwijtraken. In hun geval sleepten ze per ongeluk een be>reset --hard repareerde het niet. Running git add -A . van tevoren traceerde hij ze allemaal expliciet met Git, die werd vernietigd met reset.

20
11 окт. Antwoord van Chris Moschini op 11 oktober 2015-10-11 03:10 '15 om 3:10 2015-10-11 03:10

Om de wijzigingen van een vorige commit naar HEAD op te slaan en naar de vorige commit te gaan, voer je uit:

 git reset <SHA> 

Als er geen wijzigingen zijn vereist van de vorige commit naar HEAD en alle wijzigingen gewoon worden genegeerd, volgt u deze stappen:

 git reset --hard <SHA> 
20
28 июля '15 в 11:35 2015-07-28 11:35 het antwoord wordt gegeven door Vishnu Atrai 28 juli 15 om 11:35 2015-07-28 11:35

Ik geloof dat sommige mensen deze vraag kunnen stellen en willen weten hoe de terugdraaiing de veranderingen heeft aangebracht die ze in hun eigenaar hebben gemaakt - dat wil zeggen, alles weggooien en terugkeren naar de oorsprong / eigenaar, en in dit geval het volgende doen:

 git reset --hard origin/master 

https://superuser.com/questions/273172/how-to-reset-master-to-origin-master

19
05 февр. het antwoord wordt gegeven na 05 feb . 2015-02-05 04:28 '15 om 4:28 2015-02-05 04:28

Revert is een commando om commits te committen.

 git revert <commit1> <commit2> 

bijvoorbeeld:

git revert 2h3h23233

Het is in staat om een ​​bereik van de kop te ontvangen zoals hieronder getoond. Hier zegt 1: "Geef de laatste oplossing terug."

git revert HEAD~1..HEAD

en dan git push

16
20 авг. antwoord gegeven door Sireesh Yarlagadda 20 aug. 2015-08-20 17:45 '15 om 17.45 uur 2015-08-20 17:45 uur

Meest recente commit terugdraaien:

 git reset --hard HEAD 

HEAD is eenvoudigweg een verwijzing naar de huidige commit (laatste) in de huidige thread. Er kan op elk moment slechts één HEAD .

Ga terug naar de oudere opdracht: de snelste manier om de oude versie te herstellen is om het reset commando te gebruiken:

 # Resets index to former commit git reset 56e05fced # Moves pointer back to previous HEAD git reset --soft HEAD@{1} # Updates working copy to reflect the new commit git reset --hard 

Hiermee wordt uw HEAD-branch teruggespoeld naar de opgegeven versie. Alle verplichtingen die na deze versie zijn verschenen, zijn eigenlijk geannuleerd; jouw project is precies hetzelfde als op dat moment.

De reset-opdracht heeft verschillende opties, een van de meest interessante is de --soft vlag. Als je het gebruikt in plaats van --hard , slaat Git alle wijzigingen in deze "ongedaan gemaakt" op als lokale wijzigingen.

Een versie in een nieuw lokaal filiaal herstellen

Zoals gezegd is het gebruik van de reset-opdracht op uw HEAD branch nogal een radicale actie: het zal alle commits (in deze branch) verwijderen die na de gespecificeerde revisie verschenen. Als je zeker weet dat dit is wat je wilt, is alles in orde.

Er is echter ook een veiligere manier als u ervoor kiest om uw huidige HEAD-filiaal onaangeroerd te laten. Omdat de "branches" zo goedkoop en gemakkelijk zijn in Git, kunnen we eenvoudig een nieuwe branch maken die begint met deze oude versie:

 git checkout -b old-project-state 0ad5a7a6 

Meestal wordt het uitcheckcommando gebruikt om eenvoudig takken te wisselen. Door de optie -b op te geven, kunt u echter ook een nieuw filiaal maken (in dit voorbeeld de oude status van het project). Als je niet wilt dat het begint met de huidige HEAD-revisie, moet je ook een hash-fix opgeven - de oude revisie van het project dat we willen herstellen.

Nu heb je een nieuwe tak met de naam oude-project-staat, die de oude versie van je project weergeeft - zonder andere commits of takken aan te raken of zelfs te verwijderen.

14
31 авг. het antwoord is gegeven Lyes CHIOUKH 31 aug. 2018-08-31 14:08 '18 om 14:08 uur 2018-08-31 14:08 uur

Als de situatie urgent is en u wilt gewoon doen wat de vragenlijst op een snelle en vuile manier vroeg, in de veronderstelling dat uw project in de map "mijn project" staat: