Kaip išgauti vieną failą (ar failo pakeitimus) iš „git“ žyma?

Norėčiau sužinoti, ar galima išgauti vieną failą ar skirtumą iš failo iš „git“ žyma, nekeičiant pakeitimų.

Ar kas nors gali pateikti keletą pasiūlymų / idėjų?

478
09 июля '09 в 20:12 2009-07-09 20:12 Danny užduodama 09 liepa09, 20:12 2009-07-09 20:12
@ 8 atsakymai

Git stash“ puslapyje galite tai perskaityti (skiltyje „Diskusija“ iškart po aprašymo „Parametrai“):

Žymė yra pavaizduota kaip įsipareigojimas, kurio medis įrašo darbo katalogo būseną, o pirmasis jos tėvas yra įsipareigojimas HEAD, kai buvo sukurtas spaudas.

Taigi, galite peržiūrėti atsišaukimą (pvz., stash@{0} yra pirmasis / viršutinis tipas) kaip susijungimo pataisymą ir naudojimą:

 $ git diff stash@{0}^1 stash@{0} -- <filename> 

Paaiškinimas: stash@{0}^1 etiketė - tai pirmasis nurodyto atributo tėvas, kuris, kaip nurodyta pirmiau pateiktame paaiškinime, yra įsipareigojimas, kuriame pakeitimai buvo paslėpti. Naudojame šią git difformacinę formą (su dviem įsipareigojimais), nes stash@{0} / refs/stash yra sujungimo pataisa, ir mes turime pasakyti git, kuris iš tėvų elementų norime naudoti. Daugiau paslaptingas:

 $ git diff stash@{0}^! -- <filename> 

taip pat turėtų dirbti (žr. „ Git rev-parse manpage“, kuriame paaiškinama rev^! sintaksė rev^! skyriuje „Rangų apibrėžimas“).

Taip pat galite naudoti „ git checkout“, kad patikrintumėte vieną failą iš piniginės:

 $ git checkout stash@{0} -- <filename> 

arba išsaugokite jį pagal kitą failo pavadinimą:

 $ git show stash@{0}:<full filename> > <newfile> 

arba

 $ git show stash@{0}:./<relative filename> > <newfile> 

(Atkreipkite dėmesį, kad čia <pilnas failo pavadinimas> yra visas kelias į failą, palyginti su viršutiniu projekto katalogu (pagalvokite: palyginti su stash@{0} )).


Gali tekti apsaugoti stash@{0} nuo apvalkalo plėtinio, t.y. naudokite "stash@{0}" arba 'stash@{0}' .

708
09 июля '09 в 21:21 2009-07-09 21:21 atsakymą pateikė Jakub Narębski, liepos 09'09 , 21:21 2009-07-09 21:21

Jei naudosite git stash apply vietoj git stash pop , jis bus taikomas stash jūsų darbo medis, bet išlaikyti Atlicināt.

Šiuo būdu galite add / commit failą ir tada iš naujo nustatyti likusius pakeitimus.

29
09 июля '09 в 20:58 2009-07-09 20:58 atsakymą pateikė Tim Henigan, liepos 09 '09, 20:58, 2009-07-09 20:58

Piniginę galite gauti su „ git show stash@{0} “ (arba bet kokiu skirtuko numeriu, žr. „Git bookmark list“). Lengvai išskleiskite diferencinį skyrių vienam failui.

9
09 июля '09 в 20:42 2009-07-09 20:42 atsakymą pateikė Nathan Kitchen liepos 09 '09, 20:42 2009-07-09 20:42

Trumpas atsakymas

Jei norite pamatyti visą failą: git show stash@{0}:<filename>

Jei norite pamatyti skirtumą: git diff stash@{0}^1 stash@{0} -- <filename>

8
22 дек. Atsakymą duoda Lubošas Turekas 22 d. 2015-12-22 16:05 '15, 16:05 pm 2015-12-22 16:05

Paprasčiausiai suprantama sąvoka, nors galbūt ne geriausia, yra ta, kad turite tris failus ir norite susieti vieną failą.

Jei paleisite „ git stash kad paslėptumėte juos visus, git stash apply kad gautumėte juos atgal, ir tada git checkout fc į atitinkamą failą, kad galėtumėte iš naujo nustatyti.

Jei norite atblokuoti šį failo paleidimą, paleiskite „ git reset --hard ir vėl paleiskite „ git stash apply , naudodami faktą, kad „ git stash apply nepanaikina skirtumo nuo kamino kamino.

5
19 июля '10 в 18:36 2010-07-19 18:36 atsakymas duotas Philluminati liepos 19 d. 10 val. 18:36 2010-07-19 18:36

Yra paprastas būdas gauti pakeitimus iš bet kurios šakos, įskaitant stashes:

 $ git checkout --patch stash@{0} path/to/file 

Jei norite planuoti daugelyje dalių, galite praleisti failo specifikaciją. Arba praleiskite pleistrą (bet ne kelią), kad gautumėte visus vieno failo pakeitimus. Pakeiskite 0 git stash list cache, jei turite keletą. Atkreipkite dėmesį, kad tai atrodo kaip diff ir siūlo taikyti visus skirtumus tarp šakų. Jei norite gauti pakeitimus iš vieno / stash, žiūrėkite git cherry-pick --no-commit .

5
26 июня '17 в 6:20 2017-06-26 06:20 atsakymas buvo pateiktas pusmečiu , birželio 26 d ., 17 val. 6:20 2017-06-26 06:20
 $ git checkout stash@{0} -- <filename> 

Pastaba: 1) Įsitikinkite, kad po „-“ ir failo pavadinimo parametro 2 įveskite tarpą, pakeisdami nulį (0) su konkrečiu rida. naudoti ¾ymù s ± ra¹ ±

  git stash list 

Remiantis atsakymu @Jakub Narębski - Trumpesnė versija

1
08 сент. Atsakymas pateikiamas Rama rugsėjo 8 d. 2017-09-08 08:53 '17 at 8:53 2017-09-08 08:53

Jei paslėptus failus reikia sujungti su dabartine versija, naudokite ankstesnius metodus, naudodami dif. Priešingu atveju, galite naudoti git pop blokuoti juos, git add fileWantToKeep įdėti savo failą ir padaryti git stash save --keep-index , dygsnio viskas, išskyrus tai, kas yra scenoje. Atminkite, kad šiuo atveju skirtumas su ankstesniais atvejais yra tas, kad jis „nuspaudžia“ failą iš atminties. Ankstesni atsakymai išsaugo jį git checkout stash@{0} -- <filename> , todėl jis atitinka jūsų poreikius.

1
26 окт. atsakymas pateikiamas Hola Soy Edu Feliz Navidad 26 okt. 2017-10-26 15:59 '17 15:59 2017-10-26 15:59

Peržiūrėkite kitus klausimus apie „ žymes arba užduokite klausimą