Nustatykite tik dalį failo „Git“

Kai atlieku pakeitimus faile „Git“, kaip galiu padaryti tik kai kuriuos pakeitimus?

Pavyzdžiui, kaip aš galiu atlikti tik 15 eilutės iš 30 eilutės, kurios buvo pakeistos faile?

2394
06 июля '09 в 5:25 2009-07-06 05:25 freddiefujiwara yra nustatytas liepos 06 '09, 5:25 am. 2009-07-06 05:25
@ 22 atsakymai

Galite naudoti git add --patch <filename> (arba -p trumpai), o git pradės suskaidyti failą į tai, ką jis laiko protingais "gabaliukais" (failo dalimis). Tada jis jums pasakys šį klausimą:

 Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]? 

Čia pateikiamas kiekvieno pasirinkimo aprašymas:

  • y parengti šį kūrinį kitam įvykiui
  • n nedėkite šio kūrinio kitam įvykiui
  • q išėjimas; nedėkite šio gabalo ar bet kokio likusio gabalo
  • a įkelia šį kūrinį ir visus tolesnius fragmentus į failą
  • d nedėkite šio bloko ar kito vėlesnio fragmento į failą
  • g pasirinkite norimą aplanką
  • / ieškokite bloko, atitinkančio nurodytą reguliarią išraišką
  • j palikite šį kūrinį neišspręstą, žr. kitą neišspręstą kūrinį
  • J palikite šį kūrinį neišspręstą, žiūrėkite kitą kūrinį
  • k palikite šį kūrinį neišspręstą, žr
  • K palikite šį kūrinį neišspręstą, žr. Ankstesnį kūrinį
  • s padalinkite dabartinį gabalą į mažesnius fragmentus
  • e rankiniu būdu redaguoti esamą bloką
  • ? spausdinimo pagalba

Jei failas dar nėra saugykloje, pirmiausia galite padaryti git add -N <filename> . Po to galite tęsti su git add -p <filename> .

Po to galite naudoti:

  • git diff --staged kad įsitikintumėte, jog git diff --staged teisingus pakeitimus
  • git reset -p norite anuliuoti klaidingai pridėtus fragmentus
  • git commit -v norėdami peržiūrėti savo įsipareigojimą redaguojant pranešančiojo pranešimo tekstą.

Atkreipkite dėmesį, kad tai labai skiriasi nuo git format-patch komandos, kuria siekiama išanalizuoti .patch failų duomenis.

Nuoroda į ateitį: „ Git Tools“ - interaktyvi gamyba

3149
06 июля '09 в 5:36 2009-07-06 05:36 atsakymas pateikiamas „ cloudhead“ liepos 6 d., 09 val. 5:36 2009-07-06 05:36

Galite naudoti git add --interactive arba git add -p <file> , tada git commit ( ne git commit -a ); žiūrėkite interaktyvųjį režimą „ git-add“ puslapyje arba tiesiog vadovaukitės instrukcijomis.

Šiuolaikinis „Git“ taip pat turi git commit --interactive (ir „ git commit --patch , kuris yra nuoroda į pataisos parametrą interaktyviame git commit --patch ).

border=0

Jei norite tai padaryti iš GUI, galite naudoti „ git-gui“ . Jūs galite tiesiog pažymėti gabalus, kuriuos norite įtraukti į įsipareigojimą. Aš asmeniškai lengviau nei naudoti „ git add -i . Kitos funkcijos Git GUI, pvz., QGit arba GitX, taip pat gali turėti šią funkciją.

223
06 июля '09 в 14:49 2009-07-06 14:49 atsakymą pateikė Jakubas Narębskis liepos 06 d., 09:49, 2009-07-06 14:49

git gui suteikia šią funkciją kaip diferencialą. Tiesiog spustelėkite dešinįjį pelės klavišą ant jums įdomios linijos ir pamatysite meniu punktą „Ši eilutė išspręsti“.

118
06 июля '09 в 5:41 2009-07-06 05:41 Atsakymą pateikė Ionuț G. Stan liepos 06 d., 09:41, 2009-07-06 05:41

Manau, kad „ git add -e myfile yra paprasčiausias būdas (bent jau mano pageidavimas), nes jis tiesiog atveria teksto redaktorių ir leidžia jums pasirinkti, kurią eilutę norite vykdyti, ir kurią liniją nenorite. Dėl redagavimo komandų:

Pridėtas turinys:

Pridėtas turinys pateikiamas eilutėmis, prasidedančiomis „+“. Galite pašalinti bet kokių papildomų linijų kūrimą ištrindami juos.

nuotolinis turinys:

Ištrintą turinį vaizduoja eilutės, prasidedančios „-“. Galite neleisti jų ištrinti konvertuodami „-“ į „“ (tarpas).

pakeistas turinys:

Pakeistą turinį vaizduoja eilutės "-" (seno turinio ištrynimas), po kurių eina eilutės "+" (pridedant pakeitimo turinį). Galite užkirsti kelią modifikacijos diegimui, konvertuodami eilutes „-“ į „“ ir pašalinant „+“ eilutes. Atminkite, kad tik pusės poros keitimas gali sukelti painius indekso pokyčius.

Kiekvienas „ git add git --help add

64
25 сент. atsakymą pateikė „ FreedomBanana“ rugsėjo 25 d 2015-09-25 23:45 '15 , 11:45 pm 2015-09-25 23:45

Jei naudojate „vim“, galite pabandyti puikų įskiepį.

Galite pamatyti skirtingą failą tarp darbo kopijos ir indekso su :Gdiff , tada pridėti eilutes arba stulpelius į indeksą naudodami klasikines vim diff komandas, pvz., dp . Išsaugokite indekso pakeitimus ir nukopijuokite juos su :Gcommit , ir baigsite.

Labai geri vaizdo įrašai čia (žr. 2 dalį).

42
23 февр. Atsakymą pateikė François vasario 23 d. 2012-02-23 13:37 '12, 13:37 pm 2012-02-23 13:37

Aš labai rekomenduoju naudoti „Atlassian“ „ SourceTree“ . Tai nemokama. Galite greitai ir lengvai sukurti atskirus kodo arba atskirų kodų eilutes.

2019

29
12 авг. atsakymą pateikė user486646 12 rug . 2014-08-12 16:32 '14, 16:32 2014-08-12 16:32

Verta pažymėti, kad norint naudoti naują failą git add --patch , pirmiausia turite pridėti failą prie indekso naudodami git add --intent-to-add :

 git add -N file git add -p file 
22
05 дек. Atsakymą pateikė vartotojo1338062 05 dec. 2014-12-05 20:29 '14, 20:29 2014-12-05 20:29

Kai turiu daug pakeitimų ir galų gale sukuriu keletą pakeitimų, noriu laikinai išsaugoti savo pradinį tašką prieš kuriant dalykus.

Čia jis yra:

 $ git stash -u Saved working directory and index state WIP on master: 47a1413 ... $ git checkout -p stash ... step through patch hunks $ git commit -m "message for 1st commit" $ git checkout -p stash ... step through patch hunks $ git commit -m "message for 2nd commit" $ git stash pop 

Whymarh atsakymas yra tai, ką aš paprastai darau, išskyrus tai, kad kartais įvyksta daug pokyčių, ir galiu pasakyti, kad galiu padaryti klaidą nustatydamas dalykus, ir noriu, kad kai kuri valstybė pasitrauktų į antrąjį leidimą .

19
07 июня '13 в 1:14 2013-06-07 01:14 atsakymas pateikiamas birželio 7 d. 13 d. 1:14 2013-06-07 01:14

Jei naudojate „emacs“, patikrinkite „ Magit“ , kuri suteikia „git“ sąsają „emacs“. Jis gerai palaiko tarpinius fragmentus (failų dalis).

12
08 июля '09 в 10:00 2009-07-08 10:00 Mark van Lent atsakymas liepos 8 d. 09 d. 10:00 2009-07-08 10:00

Kaip ir jdsumsion, taip pat galite paslėpti dabartinį darbą, bet tada naudokite difffool, pvz., Meld, kad ištrauktumėte pasirinktus pakeitimus iš talpyklos. Taigi, galite netgi rankiniu būdu redaguoti gabalus, kurie yra šiek tiek skausmingi, kai git add -p :

 $ git stash -u $ git difftool -d -t meld stash $ git commit -a -m "some message" $ git stash pop 

Naudojant Atšaukimo metodą, galėsite išbandyti, ar jūsų kodas vis dar veikia, kol ji vykdoma.

8
07 авг. atsakymas davė derhoch 07 rug . 2013-08-07 16:25 '13, 16:25, 2013-08-07 16:25

„Intellij IDEA“ (ir manau, kad visi kiti serijos produktai) sukūrė paramą daliniams įsipareigojimams, nes v2018.1

2019

Tiems, kurie naudoja „ Git“ plėtinius :

>

7
27 июля '15 в 12:52 2015-07-27 12:52 atsakymas pateikiamas srgstm liepos 27 d. 15 val. 12:52 2015-07-27 12:52

„Vim-gitgutter“ įskiepis gali sukurti medžius , nepalikdamas vim redaktoriaus

 :GitGutterStageHunk 

Be to, jame yra kitų įdomių funkcijų, pvz., Stulpelis su kitu ženklu, kaip ir kai kuriuose šiuolaikiniuose IDE.

Jei tik dalis gabalo turi būti tiekiama vim- fugitive

 :Gdiff 

leidžia pasirinkti matomo diapazono diapazoną, tada :'<,'>diffput arba :'<,'>diffget keisti / keisti atskiras eilutes.

6
09 янв. atsakymas pateikiamas c0ffeeartc 09 jan. 2015-01-09 20:11 '15 ne 20:11 2015-01-09 20:11

Bandžiau git add -p filename.x , bet „Mac“ rado, kad gitx ( http://gitx.frim.nl/ arba https://github.com/pieter/gitx ) yra daug lengviau padaryti būtent tas linijas, kurias norėjau .

5
16 авг. atsakymas duotas jasongregori rugpjūčio 16 d. 2011-08-16 02:43 '11 at 2:43 2011-08-16 02:43

Su „TortoiseGit“:

Dešiniuoju pelės mygtuku spustelėkite failą ir naudokite Context Menu → Restore after commit . Taip bus sukurta failo kopija. Tada galite redaguoti, pavyzdžiui, failą. „TortoiseGitMerge“ ir atminkite visus pakeitimus, kurių nenorite atlikti. Išsaugoję šiuos pakeitimus, galite padaryti failą.

4
06 апр. atsakymą pateikė Fr0sT 06 balandžio. 2015-04-06 19:16 '15, 19:16, 2015-04-06 19:16

git-meld-index - citavimas iš svetainės:

„git-index“ indeksas veikia - arba bet kuris kitas git diffftool (kdiff3, difuzinis ir tt) - taip, kad galėtumėte interaktyviai keisti „git“ indekso pakeitimus (dar vadinamus „git“).

Tai panaši į git add -p ir git add --interactive funkcionalumą. Kai kuriais atvejais naudoti lengviau / greičiau nei git add -p. Taip yra todėl, kad jums leidžiama, pavyzdžiui:

  • daugiau konteksto
  • žr
  • redaguokite jį rankiniu būdu ir peržiūrėkite „tiesioginius“ skirtumus (atnaujinami po kiekvieno klavišo paspaudimo)
  • eikite į pakeitimą, be n kiekvienam pakeitimui, kurį norite praleisti.

Naudojimas

„Git“ saugykloje paleiskite:

 git meld-index 

Pamatysite, kad „meld“ (arba sukonfigūruotas „git diffftool“) pasirodys

LEFT : laikini katalogo failai, nukopijuoti iš darbo medžio

RIGHT : laikinas katalogas su indekso turiniu. Tai taip pat apima failus, kurie dar neįtraukti į indeksą, bet yra pakeisti arba nekontroliuojami darbinėje kopijoje - šiuo atveju pamatysite failo turinį iš HEAD.

Redaguokite indeksą (dešinėje), kol jis bus laimingas. Nepamirškite išsaugoti, jei reikia.

Kai baigsite, uždarykite „meld“ ir „git-meld-index“ indeksą, kad jis atitiktų laikinojo katalogo, esančio dešinėje pusėje esančio „meld“ komandos, kurią ką tik redagavote, turiniui.

2
04 июля '15 в 23:26 2015-07-04 23:26 atsakymą pateikė Croad > liepos 4 d. 15 d. 23:26 2015-07-04 23:26

Emacs taip pat turi gitsum

2
13 июля '09 в 0:52 2009-07-13 00:52 atsakymas pateikiamas liepos 13 d., 09:52 at 0:52 2009-07-13 00:52

Įtraukus ankstesnį atsakymą, jei norite naudoti komandinę eilutę, įveskite git add -e myfile suteikia jums galimybę pasirinkti eilutę pagal eilutes, kurias norite priskirti, nes ši komanda atvers redaktorių su skirtumais, pavyzdžiui:

2019

24 авг. Atsakymas suteikiamas Beto Aveiga 24 rug . 2018-08-24 18:24 '18, 18:24 val. 2018-08-24 18:24

Atom“ naudotojams „ github“ pakete yra interaktyvus „ git gui stiliaus nustatymas. Etiketėse žr. Pakuotės dokumentaciją .

Naudojant „Atom“ galite dirbti su tema su tamsiu fonu (pagal nutylėjimą git gui turi baltą foną).

1
10 апр. Ioannio Filippidio atsakymas 10 Bal 2018-04-10 05:31 '18 at 17:31 pm 2018-04-10 05:31

Kaip rodo vienas atsakymas , galite naudoti git add --patch filename.txt

arba trumpoji forma git add -p filename.txt

... bet failams, kurie jau yra jūsų saugykloje, yra daug geriau naudoti komandų komandą „Patch flag“ (jei naudojate gana naujausią „git“ versiją): git commit --patch filename.txt

... arba, vėlgi, trumpą formą git commit -p filename.txt

... ir tada naudodami nurodytus klavišus (y / n ir tt) pasirinkite eilutes, kurios bus įtrauktos į įvykį.

1
30 июня '14 в 11:34 2014-06-30 11:34 atsakymą davė Samuel Lampa birželio 14 d. 14 val. 11:34 2014-06-30 11:34

git-cola yra puiki grafinė sąsaja, taip pat integruota funkcija. Tiesiog pasirinkite scenos eilutes ir paspauskite S. Jei nėra pasirinkta, vykdomas visas gabalas.

0
27 авг. atsakymas duotas AndiDog 27 rug . 2015-08-27 14:28 '15 , 14:28 2015-08-27 14:28

Jei „ Windows platformoje, mano nuomone, „ git gui yra geriausia priemonė stage / kelioms eilutėms priskirti iš unstaged failo.

1. Hankas išmintingas:

  • Pasirinkite failą iš unstagged Changes skilties unstagged Changes
  • Dešiniuoju pelės mygtuku spustelėkite norimą vykdyti kodą.
  • Pasirinkite Stage Hunk for commit

2. Linija:

  • Pasirinkite failą iš unstagged Changes skilties unstagged Changes
  • Pasirinkite eilutę / eilutes, kurias norite surinkti.
  • Pasirinkite Stage Lines for commit

3. Jei norite sukurti pilną failą, išskyrus kelias eilutes:

  • Pasirinkite failą iš unstagged Changes skilties unstagged Changes
  • Paspauskite „ Ctrl+T (Stage file to commit)
  • Pasirinktas failas dabar perkeltas į skyrių „ Staged Changes .
  • Pasirinkite eilutę / eilutes, kurias norite surinkti.
  • Pasirinkite „ UnStage Lines for commit
0
28 мая '15 в 15:52 2015-05-28 15:52 Atsakymą davė Anvesh Yalamarthy gegužės 28 d., 15 val. 15:52 2015-05-28 15:52

Kiti klausimai apie tag žymes arba užduoti klausimą