Kung paano ibalik ang Git repository sa nakaraang gumawa

Paano ako makakabalik mula sa isang kasalukuyang estado sa isang snapshot na kinuha sa isang partikular na pag-aayos?

Kung gagawin ko ang git log , pagkatapos ay nakukuha ko ang sumusunod na 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. 

Paano bumalik sa pagkukumpuni mula Nobyembre 3, i.e. upang ayusin 0d1d7fc ?

6500
06 нояб. itakda ni Crazy Serb 06 Nobyembre. 2010-11-06 19:58 '10 sa 19:58 2010-11-06 19:58
ответ 41 sagot
  • 1
  • 2

Ito ay depende sa kung ano ang ibig sabihin mo sa pamamagitan ng "ibalik".

Pansamanta>

Kung nais mong pansamanta>

 # This will destroy any local modifications. # Don't do it if you have uncommitted work you want to keep. git reset --hard 0d1d7fc32 # Alternatively, if there work to keep: git stash git reset --hard 0d1d7fc32 git stash pop # This saves the modifications, then reapplies that patch after resetting. # You could get merge conflicts, if you've modified things which were # changed since the commit you reset to. 

Kung nagulo ka, na-drop mo na ang iyong mga lokal na pagbabago, ngunit maaari kang hindi bababa sa bumalik sa kung saan ikaw ay bago sa pamamagitan ng pag-reset muli ng mga setting.

Kanselahin ang nai-publish na gumawa ng mga bagong gumawa

Sa kabi>

git-revert manpage ay talagang sumasaklaw ng maraming ito sa paglalarawan.  Ang isa pang kapaki-pakinabang na link ay ang git-scm.com na seksyon, na tinatalakay ang git-revert . 

Kung nagpasya kang hindi mo nais na bumalik sa dulo, maaari mong ibalik ang reverse (tulad ng inilarawan dito) o bumalik bago bumalik (tingnan ang nakaraang seksyon).

Maaari mo ring makita ang sagot na ito na kapaki-pakinabang sa kasong ito:
Paano upang ilipat ang ulo pabalik sa nakaraang lugar? (Paghiwalay ng ulo)

8356
06 нояб. Ang sagot ay ibinigay ng Cascabel Nobyembre 6. 2010-11-06 20:04 '10 sa 20:04 2010-11-06 20:04

Bumalik ng isang nagtatrabaho kopya sa huling gumawa

Upang bumalik sa nakaraang gumawa, hindi papansin ang anumang mga pagbabago:

 git reset --hard HEAD 

kung saan ang HEAD ang huling pag-aayos sa iyong kasalukuyang thread.

border=0

Pagbalik ng isang nagtatrabaho kopya sa isang mas lumang commit

Upang bumalik upang gumawa, na mas malaki kaysa sa huling gumawa:

1396
21 авг. boulder_ruby reply Aug 21 2012-08-21 09:19 '12 sa 9:19 2012-08-21 09:19

Maraming mahirap at mapanganib na mga sagot, ngunit sa katunayan ito ay madali:

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

Ibabalik nito ang lahat ng bagay mula sa HEAD sa isang hash commit, na nangangahulugang nililikha nito ang estado na ito sa nagtatrabaho na puno, na tila ang bawat pangako ay naibalik na. Pagkatapos ay maaari mong ayusin ang kasalukuyang puno, at ito ay lilikha ng isang ganap na bagong pag-aayos, katumbas ng katumbas ng pag-aayos, kung saan ka "nagbalik".

(Ang bandila --no-commit nagpapahintulot sa git na ibalik ang lahat ng ginagawa sa parehong oras - kung hindi man ay hihilingin sa iyo na magpadala ng isang mensahe para sa bawat gumawa sa saklaw, littering ang iyong kasaysayan sa mga hindi kinakai>

Ito ay isang ligtas at madaling paraan upang i-roll pabalik sa isang nakaraang estado . Wa>

1361
12 февр. ang sagot ay ibinigay ni Yarin sa Peb. 12. 2014-02-12 07:18 '14 sa 7:18 AM 2014-02-12 07:18

Ang pinakamahusay na pagpipilian para sa akin at marahil para sa iba ay ang pagpipiliang reset ng Git:

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

Ito ang pinakamahusay na pagpipilian para sa akin! Ito ay simple, mabilis at mahusay!


Tandaan: Tulad ng nabanggit sa mga komento, huwag gawin ito kung ibinabahagi mo ang iyong sangay sa ibang mga tao na may mga kopya ng mga lumang gumawa.

Mula rin sa mga komento, kung gusto mong gamitin ang mas kaunting "ballzy" na paraan, maaari mong gamitin

git clean -i

173
22 окт. Ang sagot ay ibinigay ni Pogrindis noong Oktubre 22. 2013-10-22 14:53 '13 sa 14:53 2013-10-22 14:53

Bago sumagot, magdagdag ng isang maliit na background, na nagpapaliwanag kung ano ang HEAD .

First of all what is HEAD?

HEAD ay isang reference lamang sa kasalukuyang (huling) gumawa sa kasalukuyang thread. Sa anumang oras ay maaari lamang maging isang HEAD (hindi kasama ang git worktree ).

Ang mga nilalaman ng HEAD naka HEAD imbak sa loob ng .git/HEAD at naglalaman ng 40 bytes ng SHA-1 ng kasalukuyang gumawa.


detached HEAD

Kung hindi mo ginagamit ang huling gumawa, ito ay nangangahulugan na ang HEAD tumuturo sa nakaraang gumawa sa kasaysayan, ito ay tinatawag na detached HEAD .

2019

06 февр. Ang sagot ay ibinigay sa CodeWizard 06 Peb. 2015-02-06 00:56 '15 sa 0:56 2015-02-06 00:56

Kung nais mong mag-overclock, burahin ang huling mensahe ng gumawa at ilagay ang mga nabagong file sa queue, dapat mong gamitin ang command:

 git reset --soft HEAD~1 
  • --soft nagpapahiwatig na ang mga naka-unlock na file ay dapat na mai-save bi>--hard , na itapon ang mga ito.
  • HEAD~1 - huling pag-aayos. Kung nais mong i-roll back 3 pag-aayos, maaari mong gamitin ang HEAD~3 . Kung nais mong i-roll pabalik sa isang partikular na numero ng rebisyon, maaari mo ring gawin ito gamit ang iyong SHA-hash.

Ito ay isang kapaki-pakinabang na utos sa mga sitwasyon kung saan mo ginawa ang maling bagay, at gusto mong kanselahin ang huling paggawa.

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

116
04 марта '14 в 20:25 2014-03-04 20:25 Ang sagot ay ibinigay ni Stephen Ostermiller noong Marso 04 '14 sa 20:25 2014-03-04 20:25

Sinubukan ko ang maraming mga paraan upang i-undo ang mga lokal na pagbabago sa Git, at tila ito ay pinakamahusay na gumagana kung gusto mo lamang bumalik sa huling estado ng gumawa.

 git add .  git checkout master -f 

Maikling paglalarawan:

  • Hindi ito makagagawa ng anumang gumawa, katulad ng git revert .
  • Hindi nito i-detach ang iyong HEAD tulad ng git checkout <commithashcode> .
  • I-override nito ang lahat ng iyong mga lokal na pagbabago at alisin ang lahat ng mga idinagdag na file mula nang huling gumawa sa thread.
  • Gumagana lamang ito sa mga pangalan ng mga sanga, kaya maaari ka lamang bumalik sa huling gumawa sa sangay sa ganitong paraan.

Natagpuan ko ang isang mas maginhawa at madaling paraan upang makamit ang mga resulta sa itaas:

 git add .  git reset --hard HEAD 

kung saan ipinapahiwatig ng HEAD ang huling gumawa sa iyong kasalukuyang thread.

Ito ang parehong code bi>git add . bago i- git reset --hard HEAD upang burahin ang lahat ng mga bagong file na nalikha mula noong huling gumawa, dahil ito ang inaasahan ng karamihan sa mga tao kapag bumalik ako sa huling gumawa.

104
29 июля '12 в 14:01 2012-07-29 14:01 ang sagot ay ibinigay sa Roman Minenok Hulyo 29, '12 sa 02:01 2012-07-29 14:01

Magagawa mo ito sa sumusunod na dalawang utos:

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

Aalisin nito ang nakaraang Git na gumawa.

Kung nais mong i-save ang iyong mga pagbabago, maaari mo ring gamitin ang:

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

Pagkatapos ay i-save ang iyong mga pagbabago.

90
12 дек. Ang sagot ay ibinigay kiran boghra 12 Disyembre. 2014-12-12 09:52 '14 sa 9:52 ng 2014-12-12 09:52

Sabihin nating mayroon kang sumusunod na mga sumusunod sa isang tekstong file na pinangalanan ~/commits-to-revert.txt (ginamit ko ang git log --pretty=oneline upang makuha ang mga ito)

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

Gumawa ng script ng bash shell upang ibalik ang bawat isa sa kanila:

55
14 окт. ang sagot ay ibinigay sa pamamagitan ng Lance Caraccioli 14 Oktubre. 2011-10-14 00:51 '11 sa 0:51 2011-10-14 00:51

Karagdagang Mga Alternatibo sa Mga Solusyon sa Jefromi

Ang mga solusyon ni Jefromi ay talagang ang pinakamahusay, at dapat mong gamitin ang mga ito. Gayunpaman, para sa pagkakumpleto, nais ko ring ipakita ang iba pang mga alternatibong solusyon, na maaari ring magamit upang ibalik ang isang gumawa (sa kamalayan na lumikha ka ng isang bagong gumawa na nagbabaligtad ng mga pagbabago sa nakaraang gumawa, katulad ng git revert ).

Upang maging malinaw, ang mga alternatibo na ito ay hindi ang pinakamahusay na paraan upang ibalik sa gumawa , Jefromi solusyon , ngunit nais ko lamang upang ipahiwatig na maaari mo ring gamitin ang iba pang mga paraan upang makamit ang parehong antas ng git revert .

Alternatibong 1: Hard at soft reset

Ito ba ay isang bahagyang binagong bersyon ng solusyon ni Charles Bailey upang Kumuha ng SHA-hash na bumalik sa Git? :

53
29 июня '14 в 20:51 2014-06-29 20:51 ang sagot ay ibinigay ng user456814 Hunyo 29 '14 sa 20:51 2014-06-29 20:51

Wala akong nagtrabaho dito maliban sa eksaktong kumbinasyon na ito:

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

Ang susi dito ay pinilit na itulak, wa>

53
13 февр. ang sagot ay ibinigay serdarsenay 13 feb . 2018-02-13 01:40 '18 sa 1:40 2018-02-13 01:40

Narito ang isang mas madaling paraan upang bumalik sa nakaraang gumawa (at magkaroon ito sa isang unmanaged estado, gawin ang anumang gusto mo dito):

 git reset HEAD~1 

Kaya, hindi na kai>

50
29 февр. ang sagot ay ibinigay ni Paul Walczewski noong Pebrero 29. 2016-02-29 11:40 '16 sa 11:40 2016-02-29 11:40

Ok, bumalik sa nakaraang gumawa sa git ay pretty simple ...

Bumalik na wa> pagbabago:

 git reset --hard <commit> 

Bumalik at i-save ang mga pagbabago:

 git reset --soft <commit> 

Ipaliwanag na ang paggamit ng git reset, maaari mong i-reset sa isang tiyak na estado, karaniwan ay may isang hash ng gumawa, tulad ng iyong nakita sa itaas.

Ngunit, tulad ng nakikita mo, ang kaibahan ay ang paggamit ng dalawang bandila --soft at - --hard , ang default ay git reset gamit ang --soft bandila, ngunit laging inirerekomenda na gamitin ang bandila, ipinaliliwanag ko ang bawat bandila:


--soft

Ang default na bandila, tulad ng ipinaliwanag, ay hindi nangangai>


--Hard

Mag-ingat sa bandila na ito, i-reset nito ang gumaganang puno, at ang lahat ng mga pagbabago sa mga sinusubaybayan na mga file ay nawawala!


Gumawa rin ako ng isang imahe sa ibaba na maaaring mangyari sa tunay na buhay habang nagtatrabaho sa git:

2019

Sa pag-aakala na iyong pinag-uusapan ang host at sa angkop na sangay (ipinapahiwatig nito na maaari itong maging anumang sangay sa trabaho na nag-aalala ka):

 # 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 

Natagpuan ko ang sagot mula sa post ng blog Tanggalin ang isang remote Git repository para sa isang tiyak na gumawa .

45
10 мая '16 в 20:21 2016-05-10 20:21 reply sa markreyes May 10, '16 at 20:21 2016-05-10 20:21

Pagkatapos ng lahat ng mga pagbabago, kapag pinindot mo ang lahat ng mga utos na ito, maaaring kai>

 git push -f ... 

At hindi >git push .

34
05 сент. ang sagot ay ibinigay ng sivi 05 sep . 2013-09-05 17:03 '13 sa 17:03 2013-09-05 17:03

May isang utos (hindi bahagi ng kernel ng Git, ngunit nasa git-extras package) partikular para sa pagbalik at pag-execute ng mga lumang commits:

 git back 

Sa pahina ng tao , maaari rin itong gamitin bi>

 # Remove the latest three commits git back 3 
32
08 авг. ang sagot ay ibinigay ng Shadow Man 08 aug. 2013-08-08 21:30 '13 sa 21:30 2013-08-08 21:30

Bumalik sa huling gumawa at huwag pansinin ang lahat ng mga lokal na pagbabago:

 git reset --hard HEAD 
27
26 июля '16 в 16:13 2016-07-26 16:13 Ang sagot ay ibinigay ni Mohammed Irfan Tirupattur noong Hulyo 26 '16 sa 16:13 2016-07-26 16:13

Piliin ang kinakai>

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

hanggang sa makuha mo ang pag-aayos na gusto mo. Upang ipilit ang HEAD upang ituro ito, gawin

 git reset --hard HEAD~1 

o i- git reset --hard HEAD~2 o iba pa.

26
26 февр. ang sagot ay ibinigay tonythomas01 Pebrero 26. 2014-02-26 15:52 '14 sa 15:52 2014-02-26 15:52

Maaari mong kumpletuhin ang mga unang hakbang na ito sa iyong sarili at bumalik sa git-repo.

  1. Hilahin ang pinakabagong bersyon ng iyong repository mula sa Bitbucket gamit ang git pull --all command.

  2. Patakbuhin ang git log command na may -n 4 mula sa iyong terminal. Ang numero pagkatapos -n ay tumutukoy sa bi>

    $ git log -n 4

  3. I-reset ang reset ng git reset --hard HEAD~N kasaysayan ng iyong repository gamit ang git reset --hard HEAD~N kung saan ang N ay ang bi>

  4. Mag-click sa isang pagbabago sa git repo gamit ang git push --force upang pilitin ang isang pagbabago.

Kung nais mo ang git repository na magkaroon ng isang nakaraang gumawa

 git pull --all git reset --hard HEAD~1 git push --force 
24
06 апр. Sumagot na ibinigay ni Nanhe Kumar noong Abril 06 2017-04-06 15:20 '17 sa 15:20 2017-04-06 15:20

Ito ay isa pang direktang paraan ng pag-reset para sa kamakai>
 git stash git stash clear 

Direktang nililimas nito ang lahat ng mga pagbabagong ginawa mo mula nang huling ginawa.

PS: Mayroon siyang maliit na suliranin; Tinatanggal din nito ang lahat ng mga nai-save na mga pagbabago sa cache kamakailan. Sa tingin ko sa karamihan ng mga kaso hindi mahalaga.

20
05 мая '16 в 14:43 2016-05-05 14:43 ang sagot ay ibinigay ng Point Networks 05 Mayo '16 sa 14:43 2016-05-05 14:43

Upang lubos na linisin ang direktoryo ng tagapagkodigo mula sa i>

 git add -A . git reset --hard HEAD 

git reset --hard HEAD mapupuksa ang mga pagbabago, ngunit hindi ito mapupuksa ang "bagong" mga file. Sa kani>reset --hard hindi reset --hard ito. Pagpapatakbo ng git add -A . nang maaga, tahasang sinubaybayan niya si>

20
11 окт. Sumagot na ibinigay ni Chris Moschini noong Oktubre 11 2015-10-11 03:10 '15 sa 3:10 2015-10-11 03:10

Upang i-save ang mga pagbabago mula sa isang nakaraang gumawa sa HEAD at pumunta sa nakaraang gumawa, isagawa ang:

 git reset <SHA> 

Kung wa>

 git reset --hard <SHA> 
20
28 июля '15 в 11:35 2015-07-28 11:35 ang sagot ay ibinigay ni Vishnu Atrai Hulyo 28 '15 sa 11:35 2015-07-28 11:35

Naniniwala ako na ang i>

 git reset --hard origin/master 

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

19
05 февр. ang sagot ay ibinigay nevster 05 feb . 2015-02-05 04:28 '15 sa 4:28 2015-02-05 04:28

Ang pagbabalik ay isang utos na magkasala.

 git revert <commit1> <commit2> 

Halimbawa:

git revert 2h3h23233

Makatanggap ito ng hanay mula sa ulo gaya ng ipinapakita sa ibaba. Sinasabi dito 1: "Bumalik sa huling pag-aayos."

git revert HEAD~1..HEAD

at pagkatapos ay gawin git push

16
20 авг. Sumagot na ibinigay ni Sireesh Yarlagadda 20 aug. 2015-08-20 17:45 '15 sa 5:45 pm 2015-08-20 17:45

Ibalik ang Pinakahuling Komiteng:

 git reset --hard HEAD 

HEAD ay isang reference lamang sa kasalukuyang (huling) gumawa sa kasalukuyang thread. Maaaring isa lamang HEAD sa anumang oras.

Bumalik sa mas lumang command: ang pinakamabilis na paraan upang maibalik ang lumang bersyon ay ang paggamit ng reset command:

 # 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 

Ini-rewind mo ang iyong HEAD branch sa tinukoy na bersyon. Ang lahat ng gumawa na lumitaw pagkatapos ng bersyong ito ay aktwal na nakansela; ang iyong proyekto ay eksaktong katulad ng sa sandaling iyon.

Ang i-reset na command ay may i>--soft flag. Kung gagamitin mo ito sa halip na - --hard , I-save ng Git ang lahat ng mga pagbabago sa mga "undone" na ito bi>

Ipinapanumbalik ang isang bersyon sa bagong lokal na sangay

Tulad ng sinabi, ang paggamit ng i-reset na utos sa iyong sangay ng HEAD ay isang radikal na pagkilos: aalisin nito ang anumang gumawa (sa sangay na ito) na lumitaw pagkatapos ng tinukoy na rebisyon. Kung sigurado ka na ito ang gusto mo, ang lahat ay nasa order.

Gayunpaman, mayroon ding isang mas ligtas na paraan kung pipiliin mong iwanan ang iyong kasalukuyang sangay ng HEAD na hindi nagalaw. Dahil ang "mga sanga" ay kaya mura at madali sa Git, madali nating lumikha ng isang bagong sangay na nagsisimula sa lumang bersyon na ito:

 git checkout -b old-project-state 0ad5a7a6 

Kadalasan ang command checkout ay ginagamit upang lumipat lamang ng mga sanga. Gayunpaman, sa pamamagitan ng pagbibigay ng pagpipilian sa -b, maaari ka ring lumikha ng isang bagong branch (sa halimbawang ito, ang lumang estado ng proyekto). Kung hindi mo nais ito upang magsimula sa kasalukuyang pagbabagong HEAD, kai>

Ngayon mayroon kang isang bagong sangay na pinangalanang lumang-proyekto-estado, na sumasalamin sa lumang bersyon ng iyong proyekto - nang wa>

14
31 авг. sumagot na ibinigay sa Lyes CHIOUKH 31 aug. 2018-08-31 14:08 '18 sa 2:08 ng hapon 2018-08-31 14:08

Kung ang sitwasyon ay kagyat na at gusto mo lamang gawin kung ano ang hiniling ng tanong sa isang mabilis at maruming paraan, sa pag-aakala na ang iyong proyekto ay nasa direktoryo ng "aking proyekto":

  1. Kopyahin ang buong direktoryo at pangalanan ito ng ibang bagay, halimbawa, "ang aking proyekto ay isang kopya."

  2. Gawin:

     git reset --hard [first-4-letters>