Git faylının yalnız bir hissəsini düzəldin

Git'deki bir dosyaya değişiklik yaparken, yalnız bazı değişiklikleri nasıl yapabilirim?

Məsələn, bir faylda dəyişmiş olan 30 satırdan ibarət olan 15 satırı necə yerinə yetə bilərəm?

2394
06 июля '09 в 5:25 2009-07-06 05:25 freddiefujiwara iyul ayının 06-da saat 05: 05-da təyin olunub. 2009-07-06 05:25
@ 22 cavab

Siz git add --patch <filename> (və ya- -p üçün qısa) istifadə edə bilərsiniz və git faylınızı bölüşdürməyə başlayacaq " git add --patch <filename> ( git add --patch <filename> ) hesab edir. Sonra sizə bu sual verəcəkdir:

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

Hər bir seçimin təsviri:

  • Bu əmri növbəti əməl üçün hazırlayın
  • n növbəti əməl üçün bu parça qoymayın
  • q çıxış; bu parça və ya qalan hissələrdən birinə qoymayın
  • a bu parçanı və fayldakı bütün sonrakı parçaları qoyur
  • D bu bloku və ya faylda hər hansı bir sonrakı parçanı qoymayın
  • g getmək üçün bir parça seçin
  • / müəyyən edilmiş normal ifadəyə uyğun bir blok axtarın
  • bu parça həll olunmayıb, növbəti həll edilməyən parçaya baxın
  • J bu parçanı həll etmədi, növbəti parçaya baxın
  • bu parçanı həll etmədi, əvvəlki parçanı həll etmədi
  • K bu parçanı həll etmədən əvvəlki parçaya baxın
  • cari parçanı kiçik parçalara ayırır
  • Mövcud bloku manuel olaraq redaktə edin
  • ? çap yardımı

Fayl artıq deposunda deyilsə, əvvəlcə getmək git add -N <filename> . Bundan sonra git add -p <filename> ilə davam edə bilərsiniz.

Bundan sonra istifadə edə bilərsiniz:

  • git diff --staged - düzgün dəyişikliklər qoyduğunuzdan əmin olun
  • git reset -p səhvən əlavə edilmiş parçaları geri qaytarmaq üçün
  • bir commit mesajı düzəltmə zamanı törətməyi görmək üçün git commit -v .

Xatırlayın ki, bu, .patch fayllarının .patch məlumatlarını təhlil etmək məqsədi ilə git format-patch əmrindən fərqlidir.

Gələcəklə əlaqə: Git Tools - İnteraktiv istehsal

3149
06 июля '09 в 5:36 2009-07-06 05:36 cavab iyul ayının 06-da saat 05.33 -də verilir

git add --interactive və ya git add --interactive git add -p <file> istifadə edə bilərsiniz, sonra git commit ( not git commit -a ); go -add maneada interaktiv rejimə baxın və ya sadəcə təlimatları izləyin.

Müasir Git də var - git commit --interactive (və interaktiv törətməsində patch parametresinin bir git commit --patch olan git commit --patch - patch).

border=0

Bunu GUI-dən etmək istəyirsinizsə, git-gui istifadə edə bilərsiniz. Sadəcə sadiqliyinizə daxil olmaq istədiyiniz parçaları qeyd edə bilərsiniz. Mən şəxsən git add -i istifadə daha asan tapa bilərsiniz. QGit və ya GitX kimi digər Git GUI'lar da bu funksiyaya sahib ola bilər.

223
06 июля '09 в 14:49 2009-07-06 14:49 Cavab Jakub Narębski tərəfindən 06 iyul '09 14:49 'də verildi 2009-07-06 14:49

git gui bu funksiyanı bir fərq kimi təmin edir. Yalnız maraq dairəsinə sağ basın və "Bu xətt düzəltmək" menyusunu görəcəksiniz.

118
06 июля '09 в 5:41 2009-07-06 05:41 Cavab Ionuş G. Stan tərəfindən iyul 06 '09 saat 05:41 'da 2009-07-06 05:41

Mən hesab edirəm ki, git add -e myfile ən asan yoludur (ən azı mənim üstünlük), çünki sadəcə mətn redaktorunu açır və hansı xəttin yerinə yetirilməsini və hansı xəttin olmadığını seçməyə imkan verir. Düzenleme əmrləri ilə əlaqəli:

Əlavə məzmun:

Əlavə məzmun "+" ilə başlayan xətləri ilə təmsil olunur. Onların silinməsi ilə əlavə xəttlərin yaranmasına mane ola bilərsiniz.

uzaq məzmun:

Silinən məzmun "-" ilə başlayan strings ilə təmsil olunur. Onların silinməsini "-" "" (boşluq) "a çevirməklə qadağan edə bilərsiniz.

redaktə məzmun:

Değiştirilen içerik "-" (eski içeriğin silinmesi), ardından "+" (değiştirme içeriği eklenir) hatlarıyla gösterilir. "" "" "-" "" "" "" sətrlərini dəyişmək və "+" xəttləri silməklə bir dəyişiklik qurulmasını qarşısını ala bilərsiniz. Unutmayın ki, bir cütün yalnız yarısı dəyişə bilər ki, çaşqınlıq indeksi dəyişikliklərinə gətirib çıxara bilər.

Hər git add git --help add

64
25 сент. cavab Sep 25- dəFreedomBanana tərəfindən verilir 2015-09-25 23:45 '15 at 11:45 pm 2015-09-25 23:45

Vim istifadə edin, siz qaçaq adlanan böyük bir plugin cəhd edə bilərsiniz.

:Gdiff ilə işləyən bir kopya və indeks arasında bir fərq faylı görə bilərsiniz və sonra dp kimi klassik vim diff komutlarını istifadə edərək, :Gdiff satır və ya sütun əlavə edin. Dəyişiklikləri indeksə qeyd edin və onu kopyalayın :Gcommit , və :Gcommit .

Burada çox yaxşı giriş videoları ( 2-ci hissəyə baxın).

42
23 февр. Cavab 23 fevralda François tərəfindən verilmişdir. 2012-02-23 13:37 '12 saat 13:37 'da 2012-02-23 13:37

Atlassian'ın SourceTree istifadə məsləhət görürəm . (Bu pulsuzdur). Tez və asanlıqla fərdi kod parçaları və ya kodun fərdi xətləri yarada bilərsiniz.

2019

29
12 авг. cavab user486646 12 aug tərəfindən verilir . 2014-08-12 16:32 '14 at 16:32 2014-08-12 16:32

Qeyd edək ki, git add --patch yeni git add --patch üçün git add --patch istifadə etmək üçün əvvəlcə fayl git add --patch üçün git add --patch etmək lazımdır: git add --intent-to-add :

 git add -N file git add -p file 
22
05 дек. Cavab user1338062 05 dekabrda verilir. 2014-12-05 20:29 '14 saat 20:29 'də 2014-12-05 20:29

Bir çox dəyişiklik olduğumda və nəticədə dəyişikliklərdən bir neçə əməl yaratdığımda şeylər yaratmadan əvvəl başlanğıc nöqtəsini müvəqqəti olaraq saxlamaq istəyirəm.

Burada:

 $ 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 cavabları, mən adətən nə edirəm, bəzən bir çox dəyişiklik baş verdiyindən və şeyləri müəyyən edərkən səhv edə biləcəyimi söyləyə bilərəm və bir neçə dövlətin ikinci passa geri çəkilməsini istəyirik .

19
07 июня '13 в 1:14 2013-06-07 01:14 cavab 07 iyun '13 'də saat 01:14' da 2013-06-07 01:14 ' də veriləcək

Emacs istifadə edirsinizsə , emacs üçün git interfeysini təmin edən Magit'i yoxlayın. Aralıq parçaları (faylların bir hissəsi) yaxşı dəstəkləyir.

12
08 июля '09 в 10:00 2009-07-08 10:00 Mark van Lent tərəfindən cavab 08 iyul '09 saat 10:00 'da 2009-07-08 10:00

Jdsumsion kimi, siz də mövcud işinizi gizləyə bilərsiniz, ancaq seçilmiş dəyişiklikləri önbellekten çekmek üçün daha sonra meld kimi bir difffool istifadə edin. Beləliklə, əl- git add -p olunduğunda bir az ağrılı ədədləri düzəldə bilərsiniz:

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

Stash metodunu istifadə edərək kodunuzun yerinə yetirilməmişdən əvvəl hələ də davam etdiyini yoxlamaq imkanı verir.

8
07 авг. dərhal verilən cavab 07 avqu . 2013-08-07 16:25 '13 at 16:25 2013-08-07 16:25

Intellij IDEA (və serialda bütün digər məhsullar) qismən əməllərə dəstək verdiklərini düşünürəm, çünki v2018.1

2019

28 марта '18 в 10:00 2018-03-28 10:00 Cavab Holger Brandl tərəfindən 28 Mart 18: 00-da saat 10: 00-da başlayacaq

Git Extensions istifadə edənlər üçün:

"Kopyala" penceresinde, qismən tövsiyə etmək istədiyiniz faylı seçin, sonra sağ bölmədə düzəltmək istədiyiniz mətni seçin, sonra seçim üzərində sağ-klikləyin və kontekst menyusundakı "Seçilmiş xətləri yaradın" seçin.

7
27 июля '15 в 12:52 2015-07-27 12:52 Cavab verilir srgstm İyul 27 '15 da 12:52 2015-07-27 12:52

Vim-gitgutter plugin, vim redaktorunu istifadə etmədən, ovları yarada bilər

 :GitGutterStageHunk 

Bundan əlavə, bəzi müasir IDE'lərdəki kimi başqa bir işarə ilə sütun kimi digər maraqlı xüsusiyyətləri də təmin edir.

Əgər ovcun bir hissəsi vim- fugitive verilsə

 :Gdiff 

sonra görünən sıra aralığını seçməyə imkan verir :'<,'>diffput və ya :'<,'>diffget fərdi xəttləri dəyişdirmək / dəyişdirmək üçün dəyişmək.

6
09 янв. cavab c0ffeeartc 09 jan verildi . 2015-01-09 20:11 '15 at 20:11 'də 2015-01-09 20:11

git add -p filename.x ni sınamışam, amma bir Mac-da gitx ( http://gitx.frim.nl/ və ya https://github.com/pieter/gitx ) tam istədiyim xəttləri etmək üçün daha asan olduğunu tapdım .

5
16 авг. cavab verildi jasongregori 16 Avqust 2011-08-16 02:43 '11 'də 2:43' də 2011-08-16 02:43

TortoiseGit ilə:

Dosyayı sağ tıklayıp Context Menu → Restore after commit . Bu, faylın surətini yaradır. Sonra, məsələn faylları düzəldə bilərsiniz. TortoiseGitMerge və istədiyiniz etmək istəməyən dəyişikliklər. Bu dəyişiklikləri saxladıqdan sonra faylı işə sala bilərsiniz.

4
06 апр. Cavab 06 İyul, Fr0sT tərəfindən verilir. 2015-04-06 19:16 '15 'da 19:16' de, 2015-04-06 19:16

git-meld-index - saytdan istinadən:

git -meld indeksləri - və ya hər hansı digər git diffftool (kdiff3, diffuse, və s.) - qap indeksində dəyişiklikləri interaktiv olaraq dəyişdirə bilərsiniz (git kimi tanınır).

Bu git add-p və git add-interaktiv funksionallığı ilə bənzər. Bəzi hallarda, geld add-p daha çox istifadə daha asan / daha sürətli. Bunun səbəbi meld sizə imkan verir, məsələn:

  • daha çox kontekstə baxın
  • intral fərqlər bax
  • əl ilə düzəliş edin və "canlı" diff yeniləmələrini (hər bir mətbuatın mətnindən sonra yenilənir)
  • keçmək istədiyiniz hər bir dəyişiklik üçün n olmadan dəyişikliyə get.

İstifadə

Git deposunda:

 git meld-index 

Meld (və ya yapılandırılmış git diffftool) tərəfindən göründüğünü görürsünüz

LEFT : işçi ağacından kopyalanan müvəqqəti qovluq faylları

SAĞ : index məzmunu ilə müvəqqəti kataloqu. Bu, hələ indeksdə olmayan faylları ehtiva edir, lakin dəyişdirilir və ya iş nüsxəsində yoxlanılır - bu halda faylın məzmununu HEAD-dan görəcəksiniz.

Xoşbəxt olana qədər indeksi (sağ) düzəlt. Lazım olsa qənaət etməyi unutmayın.

Bitirdiğinizde, meld'i bağlayın və end-index index, yalnız düzenlediğiniz meld komutunun sağ tarafındaki geçici dizinin içeriğiyle eşleşecek şekilde endeksi yenileyecektir.

2

Emacs da var gitsum

2
13 июля '09 в 0:52 2009-07-13 00:52 Cavab 13 iyul 2009 - cu il tarixində 0:52 2009-07-13 00:52 tarixində verilir

Əvvəlki cavabı əlavə etsəniz, əmr satırından istifadə git add -e myfile , git add -e myfile sizə əmr etmək istədiyiniz xətt üzrə satır seçmək seçimi verir, çünki bu əmr fərqli bir redaktoru açacaqdır, məsələn:

2019

24 авг. Cavab Beto Aveiga 24 avqustda verilir . 2018-08-24 18:24 '18 saat 18:24 'da 2018-08-24 18:24

Atom istifadəçiləri üçün, github paketində interaktiv git gui tərzi qəbulu daxildir. Etiket üçün, qablaşdırma sənədlərinə baxın .

Atom istifadə edərək, bir qaranlıq fon ilə bir mövzu ilə işləməyə imkan verir (default olaraq git gui ağ fon var).

1
10 апр. Ioannis Filippidis tərəfindən verilmiş cavab 10 Apr 2018-04-10 05:31 '18 də 5:31 'də 2018-04-10 05:31

Yuxarıdakı bir cavab olaraq, git add --patch filename.txt istifadə edə bilərsiniz

və ya qısa forma git add -p filename.txt

... ancaq deposunda olan fayllar üçün, əmr əmri üçün (əgər keçidin olduqca son versiyasını istifadə edirsinizsə) -patch bayrağı istifadə etmək daha yaxşıdır: git commit --patch filename.txt

... ya da, qısa forma git commit -p filename.txt

... və sonra göstərilən düymələri (y / n, və s.) istifadə edərək, töhfə daxil ediləcək xətləri seçin.

1
30 июня '14 в 11:34 2014-06-30 11:34 Cavab Samuel Lampa tərəfindən 30 İyun 2013 tarixində 11:34 2014-06-30 11:34 tarixində verilir

git-cola əla qrafik interfeys, eləcə də daxili funksiyadır. Yalnız səhnə üçün xəttləri seçin və S. basın. Heç bir seçim edilmədikdə, tam bir yığın icra edilir.

0
27 авг. cavab AndiDog 27 avqustda verilir . 2015-08-27 14:28 '15 'da 14:28' de, 2015-08-27 14:28

Windows platformasında, mənim fikrimcə, git gui bir stage üçün ən yaxşı vasitədir və qeyri- unstaged bir unstaged bir neçə xətt çəkir.

1. Hank müdrik:

  • unstagged Changes bölməsindən bir fayl seçin unstagged Changes
  • İcra etmək istədiyiniz kodu sağ basın.
  • Stage Hunk for commit seçin

2. Xətt:

  • unstagged Changes bölməsindən bir fayl seçin unstagged Changes
  • Düzenlenecek satır / satırları seçin.
  • Stage Lines for commit seçin

3. Bir neçə xətadan başqa tam bir fayl yaratmaq istəyirsinizsə:

  • unstagged Changes bölməsindən bir fayl seçin unstagged Changes
  • Ctrl+T (Stage file to commit)
  • Seçilmiş fayl artıq Staged Changes hissəsinə köçürülür.
  • Düzenlenecek satır / satırları seçin.
  • UnStage Lines for commit seçin
0
28 мая '15 в 15:52 2015-05-28 15:52 Cavab Anvef Yalamarty tərəfindən 28 May '15 'də 15:52' də verilir. 2015-05-28 15:52

etiketləri ilə bağlı digər suallar və ya bir sual verin