„Git“ pridėti --interactive „Jūsų redaguotas kūrinys netaikomas“

Bandau naudoti „ git add --interactive kad pasirinktinai pridėčiau kai kuriuos mano indekso pakeitimus, bet nuolat gaunu pranešimą „Jūsų redaguotas gabalas netaikomas. Keisti dar kartą“. Gavau šį pranešimą, net jei aš pasirinksiu e parinktį, ir iš karto įrašysiu / uždarysiu redaktorių. Kitaip tariant, be jokio redagavimo, pleistras netaikomas.

Čia yra tikslus pavyzdys, kurį naudoju (bandau sujungti nedidelę demonstraciją):

Šaltinio failas:

 first change second change off branch third change off branch second change third change fourth change 

Naujas failas:

 Change supporting feature 1 first change second change off branch third change off branch second change third change fourth change bug fix 1 change supporting feature 1 

Bandau parodyti, kaip naudoti „ git add --interactive norint pridėti „1 klaidos“ indekso eilutę prie indekso. Vykdydamas interaktyvų failo pridėjimą, pasirinkite pleistrų režimą. Jis pristato man

 diff --git a/newfile b/newfile index 6d501a3..8b81ae9 100644 --- a/newfile +++ b/newfile @@ -1,6 +1,9 @@ +Change supporting feature 1 first change second change off branch third change off branch second change third change fourth change +bug fix 1 +change supporting feature 1 

Atsakau su dalimis, o tada ne, kad pritaikytumėte pirmąjį kūrinį. Antrasis kūrinys, kurį bandau redaguoti. Iš pradžių bandžiau pašalinti apatinę eilutę - ji neveikė. Išvykimas iš vieno gabalo taip pat neveikia, ir aš negaliu suprasti, kodėl.

58
16 июля '10 в 23:23 2010-07-16 23:23 Josh yra paprašyta liepos 16 d., 23:23, 2010-07-16 23:23
@ 8 atsakymai

Šiuo konkrečiu pavyzdžiu reikia konfigūruoti eilutės numerius kiaurymėje. Keisti eilutę:

 @@ -1.6 +2.8 @@

todėl jis perskaitė:

 @@ -2,7 +2,8 @@
31
17 июля '10 в 11:44 2010-07-17 11:44 atsakymą pateikė William Pursell, liepos 17 d., 10 val., 11:44, 2010-07-17 11:44

Ar tai kaip šis git -add post ?

border=0

Rankinis kūrinio redagavimas yra labai galingas, bet taip pat šiek tiek sudėtingas, jei niekada to nepadarėte.
Svarbiausias dalykas, kurį reikia nepamiršti: „diff“ visada yra vienas simbolis, be jokios kitos įtraukos.
Simbolis gali būti:

  • tarpas (nurodo nepakitusią eilutę),
  • a - nurodant, kad linija buvo ištrinta,
  • arba + , nurodant, kad linija buvo pridėta.

Nieko daugiau. Jis turi būti arba tarpas, arba a, arba +. Visa kita ir gausite klaidų
(modifikuotos eilutės simbolių nėra, nes jie apdorojami ištrinant senąją eilutę ir pridedant modifikuotą vieną kaip naują).

Kadangi mėgstamiausiame teksto redaktoriuje yra diferencialas (sukonfigūravote „Git“, kad galėtumėte naudoti savo mėgstamą teksto redaktorių, ar ne?), Galite daryti viską, ką norite - tol, kol įsitikinsite, kad gautas diferencialas taikomas švariai.

Ir ten yra triukas. Jei dar niekada to nepadarėte, „Git“ jums pasakys: „Jūsų redaguotas kūrinys netaikomas. taip dažnai jūs pradėsite nekęsti savo nesugebėjimo ją suprasti , nors atrodo taip lengva (ar git, nes jis negali suprasti, ko norite).

Vienas dalykas, kuris mane dažnai erzina, buvo tai, kad pamiršau vieną įtrauką. Norėčiau išskirti eilutę su - kurią reikia ištrinti, bet daugumoje teksto redaktorių, kurie įterpia - , jis neperrašo prieš tai buvusios vietos. Tai reiškia, kad pridedate papildomą erdvę visai linijai, o tai reiškia, kad diferencinis algoritmas negali rasti / suderinti šaltinio failo eilutės, o tai savo ruožtu reiškia, kad „Git“ tave gaus .

Kitas dalykas yra tas, kad skirtumas dar turi prasmę. „Reikšmė“ reiškia, kad jis gali būti taikomas tik. Kaip ir kurdami pagrįstą skirtumą, atrodo, kad tai šiek tiek tamsus menas (bent jau man dabar), bet visada turėtumėte nepamiršti, kas atrodė originaliame faile, ir atitinkamai suplanuokite savo ir + s. Jei redaguosite savo kūrinius pakankamai dažnai, galiausiai galėsite jį pakabinti.

74
16 июля '10 в 23:39 2010-07-16 23:39 atsakymą pateikė „ VonC “ liepos 16 d. 10 val. 23:39 2010-07-16 23:39

Žinoma, už tai vėlu, tačiau norėčiau paminėti, kad šis klausimas buvo aptartas praėjusiais metais „Git“ adresų sąraše ir atrodo, kad jis nepasikeitė.

Ši konkreti problema susijusi su tuo pačiu laužo skaidymu ir bandymu redaguoti. Analizė, kaip parašė Jeff King, pagrindinė problema yra:

Hm. Gerai, matau. „Ar šis skirtumas“ naudoja abiejų dalių valdymo kanalus, kad pleistras būtų padalintas į gitą. Tačiau, žinoma, antroji dalis niekada nebus teisingai taikoma, nes jos kontekstas sutampa su pirmąja dalimi, tačiau į jį neatsižvelgiama.

Bus atliktas patikrinimas su naujai redaguotu pleistru. Bet tada jis neatsižvelgia į tai, kad jūsų redaguotas pleistras gali būti negalimas ilgą laiką, priklausomai nuo to, ar sutinkate su kita atskirtos srities puse. Ir mes to negalime žinoti, nes vartotojas gali mums nepranešti (jie galėjo praleisti pirmąją pusę ir vėliau sugrįžti į jį po redagavimo etapo).

Jeffas užpildo savo postą labai pragmatišku sprendimu, kuris visada sėkmingas ir todėl labai rekomenduojamas:

Taigi, apskritai, manau, kad to paties kūrinio dalijimasis ir redagavimas yra savaime pavojingas ir sukels tokias problemas. Ir kadangi redagavimas suteikia funkcionalumo viršūnę, manau, kad turėtumėte tiesiog redaguoti ir leisti naudoti pirmąją dalies dalį arba nepriklausomai nuo jūsų pageidavimų.

Pasirinkę tik redaguoti anksčiau nepažeistą gabalą, nereikia spręsti eilutės numerių.

30
21 дек. atsakymą pateikė Niels Ganser 21 d. 2010-12-21 17:45 '10, 17:45, 2010-12-21 17:45

Jei nuspręsite neištrinti ištrynimui nustatytos eilutės, kaip

  first line -second line third line 

kur norite išsaugoti antrą eilutę, įsitikinkite, kad jį pakeisite tarpu, o ne ištrinkite visą eilutę (kaip galite atsikratyti pridėtos linijos). „Git“ naudoja eilutę kontekstui.

12
25 марта '13 в 1:18 2013-03-25 01:18 atsakymą pateikė Rose Perrone, kovo 25 d., 13:18, 2013-03-25 01:18

Neseniai aš perskaičiau šią temą, kaip dirbti su rankiniu redagavimu.

Triksas, kurį naudoju, buvo tai, kad jei turiu tokią skirtumą.

 + Line to add + Line to add + Line I dont want to include + Line I dont want to include 

Apgaulė yra pašalinti dvi eilutes, kurių aš nenoriu visiškai padaryti, kad gautas skirtumas atrodo taip.

 + Line to add + Line to add 

Nors tai labiausiai akivaizdu daugeliui žmonių, tai nebuvo man iki šiol, ir aš maniau, kad turėčiau pasidalinti savo patirtimi. Pasakykite man, ar yra kokių nors pavojų šiam metodui.

9
07 апр. atsakymas pateikiamas Sedrik 07 balandžio. 2011-04-07 11:06 '11, 11:06, 2011-04-07 11:06

Galite rankiniu būdu redaguoti eilutės numerius, kurie tikrai naudingi kai kuriais atvejais. Tačiau, tikriausiai, galite išvengti šios konkrečios problemos, nes nesugadindami pirmosios dalies.

Jei matote, kad tikriausiai turėsite šiek tiek redaguoti kažką, kurį „Git“ automatiškai pasirenka, tai geriausia tiesiog redaguoti visą gabalą, o ne padalinti, pusę, ir tada redaguoti kitą pusę. Git galės geriau jį tvarkyti.

6
20 марта '12 в 21:05 2012-03-20 21:05 Atsakymą pateikė Michaelas Hinesas kovo 20 d. 12 val

Papildoma problema, atsiradusi gavus šią klaidą, buvo ta, kad linijų pabaiga pasikeitė, kai išsaugoju redagavimo failą.

Aš naudoju „Windows“ ir naudoju „Notepad“ savo pakeitimams (taupoma tik su linijiniais „Windows“ terminais). Mano kodas buvo parašytas naudojant „Notepad ++“, ir aš ją sukonfigūravau, kad baigtumėte Unix / Linux stiliaus linijas.

Kai pakeitiau savo nustatymus, kad „Notepad ++“ būtų numatytasis redaktorius „git“, galėjau padaryti pakeitimus į gabalus.

 git config --global core.editor "notepad++" 
5
13 нояб. Atsakymas pateikiamas KLee1 13 Lap. 2012-11-13 00:03 '12 - 0:03 2012-11-13 00:03

Aš atėjau į šį klausimą, ieškodamas tos pačios problemos sprendimo ir nesugebėjau išsiaiškinti, kaip pakeisti linijų numerius (kaip nurodyta pirmiau), kad git būtų priimtas mano atveju. Radau daug geresnį būdą tai padaryti naudojant git gui . Čia galite pasirinkti skirtingas linijas, kurias norite atlikti, tada dešiniuoju pelės mygtuku spustelėkite ir pasirinkite „Scene from įsipareigojimas“. Prisimenu, kad git-cola turi tą pačią funkciją.

4
06 окт. Jayesh spalio 6 d. atsakymas 2011-10-06 11:14 '11, 11:14, 2011-10-06 11:14

Kiti klausimai apie „ tags“ arba Užduoti klausimą