Ayusin lamang ang bahagi ng file sa Git

Kapag gumawa ako ng mga pagbabago sa isang file sa Git, paano ko makagagawa lamang ng ilan sa mga pagbabago?

Halimbawa, paano ko maisagawa ang 15 linya ng 30 mga linya na binago sa isang file?

2394
06 июля '09 в 5:25 2009-07-06 05:25 freddiefujiwara ay naka-set Hulyo 6 , 2009 sa 5:25 am 2009-07-06 05:25
@ 22 mga sagot

Maaari mong gamitin ang git add --patch <filename> (o -p para sa maikli), at ang git ay sisimulan ang paghahati ng iyong file sa kung ano ang itinuturing na makatwirang "chunks" (mga bahagi ng file). Pagkatapos ay sasabihin niya sa iyo ang tanong na ito:

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

Narito ang paglalarawan ng bawat opsyon:

  • ihanda ang piraso na ito para sa susunod na gumawa
  • Huwag ilagay ang piraso para sa susunod na gumawa
  • q output; huwag ilagay ang piraso na ito o alinman sa natitirang mga piraso
  • inilalagay ang piraso na ito at lahat ng kasunod na mga fragment sa file
  • d huwag ilagay ang block na ito o anumang iba pang fragment sa file
  • g pumili ng isang piraso upang pumunta sa
  • / Paghahanap para sa isang bloke na tumutugma sa tinukoy na regular na expression
  • j iwan ang piraso na hindi nalutas, tingnan ang susunod na hindi nalutas na piraso
  • J iwan ang piraso na hindi nalutas, tingnan ang susunod na piraso
  • k iwanan ang piraso na hindi nalutas, tingnan ang mga nakaraang piraso na hindi nalutas
  • K iwan ang piraso na hindi nalutas, tingnan ang nakaraang piraso
  • hatiin ang kasalukuyang piraso sa mas maliit na mga fragment
  • manu-manong i-edit ang kasalukuyang bloke
  • ? print help

Kung ang file ay wala sa repository, maaari mo munang gawin git add -N <filename> . Pagkatapos nito ay maaari kang magpatuloy sa git add -p <filename> .

Pagkatapos nito ay maaari mong gamitin ang:

  • git diff --staged upang matiyak na inilagay mo ang tamang mga pagbabago
  • git reset -p upang i-undo ang pagkakamali ng mga fragment
  • git commit -v upang tingnan ang iyong commit habang nag-eedit ng isang gumawa ng mensahe.

Mangyaring tandaan na ito ay ibang-iba mula sa git format-patch command, na naglalayong suriin ang. .patch data ng. .patch file.

Mag-link sa hinaharap: Git Tools - Interactive na produksyon

3149
06 июля '09 в 5:36 2009-07-06 05:36 ang sagot ay ibinigay sa pamamagitan ng cloudhead Hulyo 6, 2009

Maaari mong gamitin ang git add --interactive o git add -p <file> , at pagkatapos git commit ( hindi git commit -a ); tingnan ang interactive na mode sa git-add manpage o sundin >

Ang modernong Git ay mayroon ding git commit --interactive (at git commit --patch , na isang shortcut sa patch parameter sa interactive commit).

border=0

Kung mas gusto mong gawin ito mula sa GUI, maaari mong gamitin ang git-gui . Maaari mo lamang markahan ang mga piraso na nais mong isama sa gumawa. Mas madali akong mas madaling makita kaysa sa paggamit ng git add -i . Ang iba pang mga Git GUI, tulad ng QGit o GitX, ay maaari ring magkaroon ng functionality na ito.

223
06 июля '09 в 14:49 2009-07-06 14:49 ang sagot ay ibinigay sa pamamagitan ng Jakub Narębski

Ang git gui ay nagbibigay ng functionality na ito bi>

118
06 июля '09 в 5:41 2009-07-06 05:41 Ang sagot ay ibinigay ni Ionuţ G. Stan 2009-07-06 05:41

Naniniwala ako na ang git add -e myfile ay ang pinakamadaling paraan (hindi bababa sa aking kagustuhan), dahil binubuksan >

Nagdagdag ng nilalaman:

Ang nilalamang idinagdag ay kinakatawan ng mga linya na nagsisimula sa "+". Maaari mong pigilan ang paglikha ng anumang mga linya ng karagdagan sa pamamagitan ng pagtanggal sa mga ito.

remote na nilalaman:

Ang tinanggal na nilalaman ay kinakatawan ng mga string na nagsisimula sa "-". Maaari mong pigilan ang kani>

binagong nilalaman:

Ang binagong nilalaman ay kinakatawan ng mga linya "-" (pagtanggal ng lumang nilalaman), na sinusundan ng mga linya "+" (pagdaragdag ng kapalit na nilalaman). Maaari mong pigilan ang pag-install ng isang pagbabago sa pamamagitan ng pag-convert ng mga string "-" sa "" at pag-alis ng mga linya ng "+". Tandaan na ang pagbabago lamang ng kalahati ng isang pares ay malamang na humantong sa nakalilito sa mga pagbabago sa index.

Ang bawat git add ay makukuha sa git --help add

64
25 сент. ang sagot ay ibinigay ng TheFreedomBanana Sep 25 2015-09-25 23:45 '15 sa 11:45 pm 2015-09-25 23:45

Kung gumagamit ka ng kalakasan, maaari mong subukan ang isang mahusay na plugin na tinatawag na takas .

Maaari mong makita ang isang diff file sa pagitan ng isang nagtatrabaho kopya at isang index na may :Gdiff , at pagkatapos ay magdagdag ng mga hilera o mga haligi sa index gamit ang mga klasikong vim diff command, tulad ng dp . I-save ang mga pagbabago sa index at kopyahin ito gamit ang :Gcommit , at tapos ka na.

Napakagandang mga intro video dito (tingnan ang bahagi 2 ).

42
23 февр. Ang sagot ay ibinigay ni François noong Pebrero 23. 2012-02-23 13:37 '12 sa 1:37 ng hapon 2012-02-23 13:37

Masidhing inirerekomenda ko ang paggamit ng SourceTree ng Atlassian. (Ito ay libre.) Ginagawa itong wa>

2019

29
12 авг. ang sagot ay ibinigay ng user486646 12 aug. 2014-08-12 16:32 '14 sa 16:32 2014-08-12 16:32

Mahalagang tandaan na upang magamit ang git add --patch para sa isang bagong file, dapat mo munang idagdag ang file sa index gamit ang git add --intent-to-add :

 git add -N file git add -p file 
22
05 дек. Ang sagot ay ibinigay ng user1338062 05 Disyembre. 2014-12-05 20:29 '14 sa 20:29 2014-12-05 20:29

Kapag marami akong pagbabago at sa huli ay gumawa ng i>

Narito ito:

 $ 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 

Ang sagot ni Whymarh ay karaniwang ginagawa ko, maliban sa katotohanan na kung minsan ay maraming mga pagbabago ang mangyayari, at maaari kong sabihin na maaari kong magkamali habang nagtatakda ng mga bagay, at gusto ko ang i>

19
07 июня '13 в 1:14 2013-06-07 01:14 ang sagot ay ibinigay jdsumsion Hunyo 07 '13 sa 1:14 2013-06-07 01:14

Kung gumagamit ka ng emacs, tingnan ang Magit , na nagbibigay ng git interface para sa emacs. Sinusuportahan nito ang mga intermediate fragment (bahagi ng mga file).

12
08 июля '09 в 10:00 2009-07-08 10:00 Sumagot na ibinigay ni Mark van Lent 2009-07-08 10:00

Tulad ng jdsumsion, maaari mo ring itago ang iyong kasalukuyang trabaho, ngunit pagkatapos ay gumamit ng difffool, tulad ng meld, upang hilahin ang mga napiling pagbabago mula sa cache. Kaya kahit na maaari mong manu-manong i-edit ang mga piraso, na kung saan ay isang bit masakit kapag sa git add -p :

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

Ang paggamit ng paraan ng pagtagos ay nagbibigay sa iyo ng pagkakataon na subukan kung ang iyong code ay tumatakbo pa bago isagawa ito.

8
07 авг. sagot na ibinigay derhoch 07 aug. 2013-08-07 16:25 '13 sa 16:25 2013-08-07 16:25

Intellij IDEA (at naniniwala ako na ang lahat ng iba pang mga produkto sa serye) ay binuo ng suporta para sa mga bahagyang gumawa, dahil v2018.1

2019

Para sa mga gumagamit ng Extension ng Git :

Sa window na "Kopyahin," piliin ang file na nais mong bahagyang gumawa, pagkatapos ay piliin ang teksto na gusto mong ayusin sa kanang pane, pagkatapos ay i-right-click sa pagpili at piliin ang "Bumuo ng mga napiling linya" sa menu ng konteksto.

7
27 июля '15 в 12:52 2015-07-27 12:52 ang sagot ay ibinigay srgstm Hulyo 27 '15 sa 12:52 2015-07-27 12:52

Ang vim-gitgutter plugin ay maaaring lumikha ng mga kusina nang hindi umaalis sa vim editor, gamit

 :GitGutterStageHunk 

Bi>

Kung ang bahagi lamang ng malaking piraso ay ibibigay sa vim- bugsay

 :Gdiff 

nagpapahintulot sa iyo na piliin ang saklaw ng nakikitang saklaw, pagkatapos :'<,'>diffput o :'<,'>diffget upang baguhin / baguhin ang mga indibidwal na linya.

6
09 янв. ang sagot ay ibinigay c0ffeeartc 09 jan. 2015-01-09 20:11 '15 sa 20:11 2015-01-09 20:11

Ako tried git add -p filename.x , ngunit sa isang Mac ko natagpuan na gitx ( http://gitx.frim.nl/ o https://github.com/pieter/gitx ) ay lubhang mas madaling gumawa ng eksakto ang mga linya na gusto ko .

5
16 авг. sumagot na ibinigay jasongregori Agosto 16. 2011-08-16 02:43 '11 sa 2:43 2011-08-16 02:43

Sa TortoiseGit:

Mag-right-click ang file at gamitin ang Context Menu → Restore after commit . Ito ay lilikha ng isang kopya ng file bi>

4
06 апр. ang sagot ay ibinigay ng Fr0sT 06 apr. 2015-04-06 19:16 '15 sa 19:16 2015-04-06 19:16

git-meld-index - pag-quote mula sa website:

Ang git -meld-index ay nagpapatakbo ng meld - o anumang iba pang git diffftool (kdiff3, nagkakalat, atbp.) - upang maaari mong baguhin ang interaktibong mga pagbabago sa git index (kilala rin bi>

Ito ay katulad ng pag-andar ng git add -p at git add --interactive. Sa i>

  • tingnan ang higit pang konteksto
  • tingnan ang intraline na mga pagkakaiba
  • edit ito nang mano-mano at makita ang mga 'live' diff update (na-update pagkatapos ng bawat key pindutin)
  • pumunta sa pagbabago, nang wa>

Paggamit ng

Sa repository ng git, patakbuhin ang:

 git meld-index 

Makikita mo na ang meld (o ang naka-configure na git diffftool) ay lilitaw sa pamamagitan ng

KALIWA : pansamanta>

KANAN : pansamanta>

I-edit ang index (kanan) hanggang sa ito ay masaya. Huwag kalimutang i-save kung kinakai>

Kapag tapos ka na, isara ang meld at git-meld-index ay i-update ang index upang tumugma sa mga nilalaman ng pansamanta>

2
04 июля '15 в 23:26 2015-07-04 23:26 ang sagot ay ibinigay ng Croad > Hulyo 04 '15 sa 23:26 2015-07-04 23:26
2
13 июля '09 в 0:52 2009-07-13 00:52 ang sagot ay binibigyan zut

Pagdaragdag ng nakaraang sagot, kung gusto mong gamitin ang command line, i-type ang git add -e myfile binibigyan ka ng pagpipilian upang piliin ang linya ayon sa linya na nais mong gawin, sapagkat ang command na ito ay magbubukas ng editor na may mga pagkakaiba, halimbawa:

2019

24 авг. Ang sagot ay ibinigay Beto Aveiga 24 aug. 2018-08-24 18:24 '18 sa 6:24 pm 2018-08-24 18:24

Para sa mga gumagamit ng Atom , ang github package ay nagsasama ng isang interactive git gui -style na setting. Para sa mga label, tingnan ang dokumentasyon ng packaging.

Pinapayagan ka ng paggamit ng Atom na magtrabaho ka sa isang tema na may madilim na background (sa pamamagitan ng default, git gui ay may puting background).

1
10 апр. Sagot na ibinigay ni Ioannis Filippidis 10 Abr 2018-04-10 05:31 '18 sa 5:31 ng hapon 2018-04-10 05:31

Bi>isang sagot sa itaas ay nagpapakita, maaari mong gamitin ang git add --patch filename.txt

o maikling form git add -p filename.txt

... ngunit para sa mga file na nasa iyong repository, may mas mahusay na gamitin ang -patch na bandila para sa commit command (kung gumagamit ka ng isang medyo kamakai>git commit --patch filename.txt

... o, muli, ang maikling form na git commit -p filename.txt

... at pagkatapos ay gamitin ang tinukoy na mga pindutan (y / n, atbp), upang piliin ang mga linya upang maisama sa gumawa.

1
30 июня '14 в 11:34 2014-06-30 11:34 ang sagot ay ibinigay ni Samuel Lampa noong Hunyo 30 '14 sa 11:34 2014-06-30 11:34

git-cola ay isang mahusay na graphical na interface, pati na rin ang isang built-in na function. Piliin >S. Kung wa>

0
27 авг. ang sagot ay binibigyan ng AndiDog 27 aug. 2015-08-27 14:28 '15 sa 14:28 2015-08-27 14:28

Kung sa isang platform ng Windows , sa palagay ko, ang git gui ay ang pinakamahusay na tool para sa isang stage / commit maramihang mga linya mula sa isang unstaged file.

1. Hank wise:

  • Pumili ng isang file mula sa unstagged Changes seksyon unstagged Changes
  • Mag-right-click ang code na nais mong isagawa.
  • Pumili ng Stage Hunk for commit

2. Linya:

  • Pumili ng isang file mula sa unstagged Changes seksyon unstagged Changes
  • Piliin ang hilera / linya upang maayos.
  • Piliin ang Mga Stage Lines for commit

3. Kung nais mong lumikha ng isang kumpletong file, maliban sa isang pares ng mga linya:

  • Pumili ng isang file mula sa unstagged Changes seksyon unstagged Changes
  • Pindutin ang Ctrl+T (Stage file to commit)
  • Ang napiling file ay inilipat na ngayon sa Staged Changes Seksyon.
  • Piliin ang hilera / linya upang maayos.
  • Piliin ang UnStage Lines for commit
0
28 мая '15 в 15:52 2015-05-28 15:52 Ang sagot ay ibinigay ni Anvesh Yalamarthy noong Mayo 28, '15 sa 15:52 2015-05-28 15:52

Iba pang mga katanungan tungkol sa tags o Magtanong ng isang Tanong