Atšaukti vieno failo kopijas git?

Po paskutinio įsipareigojimo, savo darbo kopijoje aš pakeitiau failų krūva, bet norėčiau atmesti vieno iš šių failų pakeitimus, kaip ir iš naujo, tame pačiame būsenoje, kaip ir paskutinis.

Tačiau noriu atšaukti tik vieno failo darbo kopijos pakeitimus, nieko daugiau.

Kaip tai padaryti?

1386
28 марта '09 в 8:09 2009-03-28 08:09 hasen yra nustatytas kovo 28, '09, 08:09 2009-03-28 08:09
@ 14 atsakymų

Galite naudoti

 git checkout -- file 

Tai galite padaryti be ( -- kaip siūlo nimrodm), bet jei failo pavadinimas atrodo kaip filialas ar žyma (arba kitas redagavimo identifikatorius), jis gali būti painus, todėl geriau naudoti -- .

Taip pat galite patikrinti konkrečią failo versiją:

 git checkout v1.2.3 -- file # tag v1.2.3 git checkout stable -- file # stable branch git checkout origin/master -- file # upstream master git checkout HEAD -- file # the version from the most recent commit git checkout HEAD^ -- file # the version before the most recent commit 
1917 m
28 марта '09 в 9:12 2009-03-28 09:12 atsakė Brian Campbell'ui kovo 28 d., 09:12 2009-03-28 09:12
 git checkout <commit> <filename> 

Šiandien jį panaudojau, nes supratau, kad mano piktogramą perrašė kelios, kai sugrįžau, kai atnaujinau į drupal 6.10, todėl turėjau ją grąžinti. Štai ką aš padariau:

border=0
 git checkout 088ecd favicon.ico 
120
28 марта '09 в 13:25 2009-03-28 13:25 atsakymas pateikiamas neoneye kovo 28 d. 09:25 2009-03-28 13:25

Tiesiog naudokite

 git checkout filename 

Tai pakeis failo pavadinimą su naujausia dabartinės filialo versija.

ĮSPĖJIMAS: pakeitimai bus atmesti - atsarginė kopija nebus išsaugota.

108
28 марта '09 в 8:55 2009-03-28 08:55 atsakymas pateikiamas nimrodm kovo 28 d., 08:55, 2009-03-28 08:55

Jei jūsų failas jau yra įdiegtas (įvyksta, kai redaguojate failą, pridėkite ir pan.), Kad išjungtumėte pakeitimus.

Naudokite

 git reset HEAD <file> 

Tada

 git checkout <file> 

Jei dar nepateikėte, naudokite

 git checkout <file> 
57
03 июля '12 в 8:46 2012-07-03 08:46 atsakymas pateikiamas thanikkal liepos 03 d. 12 val. 08:46 2012-07-03 08:46

Jei norite anuliuoti ankstesnius šio failo įvykdymo pakeitimus, galite išbandyti šiuos veiksmus:

 git checkout branchname^ filename 

Tai patikrins failą tokiu pat būdu, kaip prieš paskutinį įvykį. Jei norite šiek tiek pasitraukti, naudokite branchname~n pavadinimą.

15
28 марта '09 в 8:25 2009-03-28 08:25 sykoros atsakymas, pateiktas kovo 28 d., 08:25, 2009-03-28 08:25

Aš tai padariau per git bash:

(use "git checkout -- <file>..." to discard changes in working directory)

  1. „Git“ būsena. [Taigi, matėme vieną failą.]
  2. git checkout - index.html [Aš pakeičiau failą index.html:
  3. „Git“ statusas [šie pakeitimai dabar ištrinti]

2019

10 апр. Atsakymą pateikė Shivanandam Sirmarigari balandžio 10 d. 2018-04-10 17:54 '18 at 17:54 pm 2018-04-10 17:54

Aš visada painiojau tai, todėl čia yra pavyzdys, kaip patikrinti priminimą; tarkime, kad mes turime bash scenarijų, kad galėtume išbandyti git :

 set -x rm -rf test mkdir test cd test git init git config user.name test git config user.email test@test.com echo 1 > a.txt echo 1 > b.txt git add * git commit -m "initial commit" echo 2 >> b.txt git add b.txt git commit -m "second commit" echo 3 >> b.txt 

Šiuo metu pakeitimas nėra atliekamas talpykloje, todėl git status :

 $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: b.txt no changes added to commit (use "git add" and/or "git commit -a") 

Jei nuo šio taško atliekame git checkout , rezultatas bus toks:

 $ git checkout HEAD -- b.txt $ git status On branch master nothing to commit, working directory clean 

Jei vietoj to atliekame git reset , rezultatas yra:

 $ git reset HEAD -- b.txt Unstaged changes after reset: M b.txt $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: b.txt no changes added to commit (use "git add" and/or "git commit -a") 

Taigi, šiuo atveju - jei pakeitimai nenustatyti, „ git reset “ neturi reikšmės, o „ git checkout perrašo pakeitimus.


Pasakykime, kad paskutinį pakeitimą iš anksčiau pateikto scenarijaus yra pristatytas / talpinamas, tai yra, mes taip pat git add b.txtgit add b.txt pabaigoje.

Šiuo atveju git status šiuo metu:

 $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: b.txt 

Jei nuo šio taško atliekame git checkout , rezultatas bus toks:

 $ git checkout HEAD -- b.txt $ git status On branch master nothing to commit, working directory clean 

Jei vietoj to atliekame git reset , rezultatas yra:

 $ git reset HEAD -- b.txt Unstaged changes after reset: M b.txt $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: b.txt no changes added to commit (use "git add" and/or "git commit -a") 

Taigi, tokiu atveju - jei pakeitimai pateikiami, git reset iš esmės pakeis neapibrėžtus pakeitimus, o git checkout visiškai pakeis pakeitimus.

7
09 февр. atsakymas pateikiamas sdaau 09 vasaris 2016-02-09 11:56 '16 at 11:56 2016-02-09 11:56

Aš atkursiu savo failus SHA-id, kurį atlieku git checkout <sha hash id> <file name>

5
22 мая '12 в 23:39 2012-05-22 23:39 Atsakymas pateikiamas Beto gegužės 22 d., 12 val. 23:39 2012-05-22 23:39

Šis atsakymas skirtas komandai, kurios reikia norint atšaukti vietinius pakeitimus, kurie yra keliose konkrečiose rinkmenose viename ar daugiau aplankų (arba katalogų). Visų pirma į šį atsakymą atsakoma į klausimą, kur vartotojas turi daugiau nei vieną failą, tačiau nenori atšaukti visų vietinių pakeitimų:

jei turite vieną ar daugiau failų, galite naudoti tą pačią komandą („ git checkout -- file ) kiekvienam iš šių failų, išvardydami kiekvieną jų vietą, atskirtą tarpais, kaip:

 git checkout -- name1/name2/fileOne.ext nameA/subFolder/fileTwo.ext 

atkreipkite dėmesį į viršutinę tarp pavadinimo1 / name2 / fileOne.ext nameA / subFolder / fileTwo.ext

Keliose to paties aplanko rinkmenose:

Jei reikia atmesti visų failų pakeitimus konkrečiame kataloge, naudokite „git checkout“:

 git checkout -- name1/name2/* 

Pirmiau nurodyta žvaigždutė atlieka visų failų, esančių šioje vietoje, pavadinimo / vardo2 ištrynimo procedūrą.

Be to, šie failai gali atšaukti visų failų failų pakeitimus:

 git checkout -- name1/name2/* nameA/subFolder/* 

dar kartą pažymėkite tarpą tarp name1 / name2 / * nameA / subFolder / * aukščiau.

Pastaba: name1, name2, nameA, subFolder - visi šie aplankų pavadinimų pavyzdžiai nurodo aplanką ar paketą, kuriame galima rasti atitinkamus failus.

4
24 янв. Atsakymas pateikiamas Nirmal 24 sausis 2017-01-24 00:26 '17 - 0:26 2017-01-24 00:26

Jei nepaspaudėte arba kitaip nepasidalijote savo pranešimu:

 git diff --stat HEAD^...HEAD | \ fgrep filename_snippet_to_revert | cut -d' ' -f2 | xargs git checkout HEAD^ -- git commit -a --amend 
2
30 апр. Atsakymą pateikė Jesse Glick balandžio 30 d 2014-04-30 22:45 '14, 10:45 pm 2014-04-30 22:45

Man tai tik dirbo

 git checkout -p filename 

2019

19 авг. atsakymas pateikiamas Ramesh Bhupathi 19 rug. 2017-08-19 17:28 '17, 17:28 pm 2017-08-19 17:28

Jei jis jau yra įvykdytas, galite atšaukti failo pakeitimą ir dar kartą įsipareigoti, o paskui pripildyti naują įvykį paskutiniu įvykiu.

0
26 апр. Ginos atsakymas . 2017-04-26 22:17 '17, 10:17 pm 2017-04-26 22:17

Nežinau, kodėl, bet kai bandau įvesti savo kodą, jis atrodo kaip vaizdas.

2019

31 дек. atsakymas pateikiamas Gene gruodžio 31 d. 2018-12-31 18:55 '19, 18:55 pm 2018-12-31 18:55

Dėl ypatingo atvejo, kai jūs

  • norėdami peržiūrėti kodą, naudokite „gerrit“ (arba kitą rinkinį)

  • jau pakeitėte

  • jau išsiųstas peržiūrėti

  • norite anuliuoti pakeitimus tik konkrečiame faile.

  • Nenorite atstatyti ir paskambinti naujai peržiūros sesijai

Radau tokią seką, kuri būtų patogiausia:

  • Gauti pakeitimų rinkinį konkretiems git failams rodyti HEAD [targe_file_name]> path / file.patch

  • Atmesti pakeitimą, padarytą konkrečiame „Git“ faile -R kelias / file.patch

  • Įsipareigokite ir peržiūrėkite „git add -u git“ - atlikite peržiūrą

-1
24 окт. Zhenhua atsakymas, pateiktas spalio 24 d 2017-10-24 04:18 '17 at 4:18 2017-10-24 04:18

Kiti klausimai apie žymes arba Užduoti klausimą