Pakeitimai privalomi tam tikriems failams.

Turiu didelį git projektą, kurį aš, kvailai, importavau į užtemimą ir bėgau automatiškai. Dabar kiekvienas projekto failas rodomas kaip pakeistas. Vietoj to, kad būtų perduoti mano formatuoti failai, norėčiau grąžinti visus failus, kuriuos aš tiesiog suformatavau ir neturėjau jokių kitų pakeitimų. Pavyzdžiui:

 $ 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) # (commit or discard the untracked or modified content in submodules) # modified: dir/file1.cpp # modified: dir/file1.h # modified: dir/file2.cpp # modified: dir/file2.h # modified: dir/file3.cpp # modified: dir/file3.h # modified: dir/file4.cpp # modified: dir/file4.h 

Žinau, kad file2.cpp , file2.h ir file3.cpp buvo pakeistas turiniu (t. Y. Ne tik suformatuotas). Norėčiau atlikti šių trijų failų pakeitimus ir tada patikrinti seną versiją, kad po to galėčiau pakartotinai panaudoti šių failų pakeitimus. Norėčiau išvengti kažko panašaus:

 $ cp file2.cpp ~/tmp $ git checkout blahblahblah $ cp ~/tmp/file2.cpp . 

Jei yra akivaizdus būdas tai padaryti, o tai neapima stashing, leiskite man žinoti. nepriklausomai nuo atlikto darbo.

20
06 сент. nustatė ewok, 06.09. 2012-09-06 20:10 '12 8:10 pm 2012-09-06 20:10
@ 5 atsakymai

Galite add failus su pakeitimais, kuriuos norite išsaugoti, tada perkelti kitus failus ir išvalyti talpyklą:

 git add file2.cpp file2.h file3.cpp git stash --keep-index git stash clear 

(Atminkite, kad tai pašalins visus jūsų antspaudus.)

Tai paliks jums file2.cpp , file2.h ir file3.cpp nustatyti pataisymui. Jei vėliau norite susieti šiuos failus (o ne juos užrakinti):

 git reset git stash 

Dabar būsite savo ankstesniame įsipareigojime, turėdami tik tris failus.

21
06 сент. Atsakymas duotas redhotvengeance 06 Sep. 2012-09-06 20:21 '12 8:21 pm 2012-09-06 20:21

Žinau, kad file2.cpp , file2.h ir file3.cpp buvo pakeistas turiniu (t. Y. Ne tik suformatuotas).
Noriu atlikti šių trijų failų pakeitimus ir tada patikrinti senąsias versijas, kad galėčiau pakartotinai panaudoti šių failų pakeitimus po.

„Git 2.13“ (2017 m. Antrąjį ketvirtį) „Git Stash“ oficialiai paskelbs konkrečių failų pakeitimus

 git stash push [--] [<pathspec>...] 

Žr. Įsipareigojimą 9e14090 , priskirkite 1ada502 , įsipareigokite df6bba0 (2017 m. Vasario 28 d.) Ir įsipareigokite 9ca6326 , įsipareigokite 6f5ccd4 , įsipareigokite f5727e2 (2017 m. Vasario 19 d.) Thomas Gummerer ( tgummerer ) .
(kartu su Junio ​​C Hamano - gitster - į įsipareigojimus 44c3f09 , 2017 m. kovo 10 d.)

Kaip dokumentuota dabar :

Jei norite greitai fotografuoti, galite praleisti „stumti“.
Šiuo režimu neleidžiami argumentai neleidžia užkirsti kelio klaidoms, atsirandančioms dėl paklaidos, kurią sukelia pakomentė, dėl nepageidaujamo hipotekos.
Tai yra dvi išimtys: stash -p , kuris veikia kaip slapyvardis stash push -p ir pathspecs, kurie leidžiami po dvigubos brūkšnelės -- siekiant pašalinti dviprasmiškumą.

Kai maršruto žymekliui priskiriamas „ git stash push “, naujasis atributas įrašo pakeistas būsenas tik tiems failams, kurie atitinka kelio kelią .
Tuomet medžio indekso įrašai ir darbo failai grąžinami į HEAD būseną tik šiems failams, paliekant failus, neatitinkančius kelio programos.

Atkreipkite dėmesį, kaip pažymėjo komentarų medmunds , kad git stash naudos kelius, susijusius su Git repo šakniniu aplanku .

15
23 марта '17 в 1:10 2017-03-23 01:10 atsakymą pateikė „ VonC “ kovo 23 d. 17 d. 1:10 2017-03-23 ​​01:10

Geras pasirinkimas yra interaktyvios žymos režimo naudojimas.

 git stash --patch 

Jis daugiausia veikia kaip interaktyvus prijungimo režimas: jums bus pateikti keli skirtumai, rodantys darbo medžio pakeitimus, ir turėtumėte pasirinkti, kuriuos failus (arba tik tam tikras failo dalis). pokyčius.

Nuo man git-stash :

Naudodami --patch, galite interaktyviai pasirinkti gabalus iš skirtumo tarp HEAD ir darbo medžio, kuris turėtų būti paslėptas. Atšaukimo įrašas yra sukurtas taip, kad jo indekso būsena sutaptų su saugyklos indekso būsena, o jo darbo eilutėje yra tik tie pakeitimai, kuriuos pasirinkote interaktyviai. Tada pasirinkti darbo pakeitimai grįš iš darbo linijos. Kaip valdyti „Patch“ režimą, žr. Skyrių „Interaktyvus režimas“ (git -add (1)) .

Jūsų atveju galite matyti tik formatavimo gabalus ir juos saugoti atskirai, neprarandant svarbių pakeitimų.

5
14 апр. Atsakymą pateikė Diego V balandžio 14 d. 2016-04-14 11:27 '16 at 11:27 2016-04-14 11:27

Tai yra geras naudojimas git diff ir git apply TJO:

 git diff file2.cpp file2.h file3.cpp > ../my-changes.patch git checkout ... git apply ../my-changes.patch 

Po diff galite patikrinti pataisos failą, kad įsitikintumėte, jog yra visi jūsų pakeitimai.

Atkreipkite dėmesį, kad gali tekti naudoti parametrą --reject kad galėtumėte taikyti, jei pleistras nėra taikomas švariai. Taip pat žiūrėkite pagalbos puslapį.

3
06 сент. atsakymas pateiktas robinst 06 sept. 2012-09-06 20:30 „12, 08:30, 2012-09-06 20:30

Taip pat galite naudoti git stash -p. Taigi, galite pasirinkti, kuriuos medžius reikia pridėti prie atributų, taip pat galite pasirinkti visus failus.

Jums bus pasiūlyti keli veiksmai kiekvienam stulpui:

 y - stash this hunk n - do not stash this hunk q - quit; do not stash this hunk or any of the remaining ones a - stash this hunk and all later hunks in the file d - do not stash this hunk or any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help 
1
11 мая '17 в 18:07 2017-05-11 18:07 Atsakymą pateikė Kashan gegužės 17 d. 17 val. 07:05 2017-05-05 18:07

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