Kodėl git sako: "Ištraukti neįmanoma, nes turite nesusijusių failų"?

Kai bandau traukti projekto katalogą į terminalą, matau šią klaidą:

 harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master U app/config/app.php U app/config/database.php U app/routes.php Pull is not possible because you have unmerged files. Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'. 

Kodėl git sako: "Pull is not possible because you have unmerged files" ir kaip ją išspręsti?

82
15 окт. nustatė Harsukh Makwana spalio 15 d 2014-10-15 10:28 '14, 10:28 2014-10-15 10:28
@ 9 atsakymai

Šiuo metu atsitinka, kad turite tam tikrą rinkmenų rinkinį, kurį bandėte sujungti anksčiau, bet jie sujungė konfliktus. Idealiu atveju, jei įvyktų sujungimo konfliktas, jis turėtų juos išspręsti rankiniu būdu ir atlikti pakeitimus naudodamas „ git add file.name git commit -m "removed merge conflicts" . Dabar kitas vartotojas atnaujino aptariamus failus savo saugykloje ir pakeitė bendrąją duomenų saugyklą.

Taip atsitiko, kad paskutinio įvykio susiliejimo konfliktai (galbūt) nebuvo išspręsti, todėl jūsų failai nesusiję, taigi ir failų U ( unmerged ) vėliava. Taigi dabar, kai git pull , git suteikia klaidą, nes turite tam tikrą neteisingai išspręstą failo versiją.

Kad išspręstumėte šią problemą, turėsite išspręsti aptariamus sujungimo konfliktus ir pridėti bei padaryti pakeitimus, kad galėtumėte git pull .

Problemos atkūrimo ir sprendimo pavyzdys:

 # Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params` Desktop $ cd test 

Pirmiausia sukurkite kapinyno struktūrą

 test $ mkdir repo  cd repo  git init  touch file  git add file  git commit -m "msg" repo $ cd ..  git clone repo repo_clone  cd repo_clone repo_clone $ echo "text2" >> file  git add file  git commit -m "msg"  cd ../repo repo $ echo "text1" >> file  git add file  git commit -m "msg"  cd ../repo_clone 

Dabar mes esame repo_clone, ir jei git pull , tai sukels konfliktus

 repo_clone $ git pull origin master remote: Counting objects: 5, done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From /home/anshulgoyal/Desktop/test/test/repo * branch master -> FETCH_HEAD 24d5b2e..1a1aa70 master -> origin/master Auto-merging file CONFLICT (content): Merge conflict in file Automatic merge failed; fix conflicts and then commit the result. 

Jei ignoruojame klonų konfliktus ir daugiau įsipareigojame pradiniame repo,

 repo_clone $ cd ../repo repo $ echo "text1" >> file  git add file  git commit -m "msg"  cd ../repo_clone 

Ir tada mes git pull , mes gauname

 repo_clone $ git pull U file Pull is not possible because you have unmerged files. Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'. 

Atkreipkite dėmesį, kad file dabar yra nesusietoje būsenoje, ir jei mes atliekame git status , galime aiškiai matyti tą patį:

 repo_clone $ git status On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commit each, respectively. (use "git pull" to merge the remote branch into yours) You have unmerged paths. (fix conflicts and run "git commit") Unmerged paths: (use "git add <file>..." to mark resolution) both modified: file 

Taigi, norint išspręsti šią problemą, pirmiausia turite išspręsti sujungimo konfliktą, kurį anksčiau ignoravome

 repo_clone $ vi file 

ir nustatykite jo turinį

 text2 text1 text1 

tada pridėkite jį ir atlikite pakeitimus

 repo_clone $ git add file  git commit -m "resolved merge conflicts" [master 39c3ba1] resolved merge conflicts 
113
28 нояб. Atsakymas pateikiamas m . Lapkričio 28 d. 2014-11-28 13:51 '14, 13:51 2014-11-28 13:51
31
30 янв. Atsakymą pateikė Faisal sausio 30 d. 2017-01-30 09:05 '17 at 9:05 2017-01-30 09:05

Bandote pridėti dar vieną naują įrašą į savo vietinį skyrių, kol darbo katalogas nėra švarus. Dėl to Git atsisako pritraukti. Norėdami geriau vizualizuoti scenarijų, apsvarstykite šiuos diagramas:

nuotolinis: A <-B <-C <-D
vietinis: A <-B *
(* rodo, kad turite keletą failų, kurie buvo pakeisti, bet neįvykdyti.)

Yra dvi šios situacijos sprendimo galimybės. Galite atšaukti savo failų pakeitimus arba juos išsaugoti.

Pirmas variantas: atmesti pakeitimus
Galite naudoti git checkout kiekvienam nesusijusiam failui, arba galite naudoti git reset --hard HEAD kad iš naujo nustatytumėte visus jos filialo HEAD failus. Beje, HE jūsų vietiniame B filiale, be žvaigždės. Jei pasirinksite šią parinktį, diagrama taps tokia:

nuotolinis: A <-B <-C <-D
vietinis: A <-B

Dabar, kai traukiate, galite nukreipti savo filialą iš vedlio pakeitimų. Ištraukus filialą atrodys kapitonas:

vietinis: A <-B <-C <-D

Antras variantas: išsaugoti pakeitimus
Jei norite išsaugoti pakeitimus, pirmiausia norite išspręsti bet kokius sujungimo konfliktus kiekviename faile. Kiekvieną failą galite atidaryti IDE ir ieškoti šių simbolių:

<<<<<<< HEAD
// kodo versija
=======

// nuotolinė kodo versija
→ → →>

„Git“ pateikia jums dvi versijos versijas. HEAD ženkle esantis kodas yra esamos vietos filialo versija. Kita versija yra tai, kas gaunama iš konsolės. Pasirinkę kodo versiją (ir ištrinę kitą kodą kartu su žymekliais), galite pridėti kiekvieną failą į tarpinę sritį, įvesdami git add . Paskutinis žingsnis - priskirti savo rezultatą įvesdami git commit -m su atitinkamu pranešimu. Šiame etape mūsų diagrama atrodo taip:

nuotolinis: A <-B <-C <-D
vietinis: A <-B <-C '

Čia aš pažymėjau pataisą, kurią ką tik sukūrėme kaip C ', nes ji skiriasi nuo C fiksavimo konsolėje. Dabar, jei bandysite ištraukti, gausite neatidėliotiną klaidą. „Git“ negali atkurti savo filialo nuotolinės srities pokyčių, nes tiek jūsų filialas, tiek nuotolinė dalis yra atskirtos nuo bendrosios protėvio fiksacijos B. Šiuo metu, jei norite ištraukti, galite padaryti kitą git merge arba git rebase savo filialą nuotolinio valdymo pulte.

„Git“ meistriškumui reikia suprasti ir valdyti vienakrypčius susietus sąrašus. Tikiuosi, kad šis paaiškinimas padės jums galvoti teisinga kryptimi apie „Git“ naudojimą.

29
01 дек. Tim Biegeleisen atsakymas, gruodžio 01 d 2014-12-01 12:26 '14 at 12:26 2014-12-01 12:26

Tai paprastas sprendimas. Tačiau jums tai pirmiausia reikia išmokti

 vimdiff 

Jei norite pašalinti konfliktus, galite naudoti

 git mergetool 

Pirmiau minėta komanda iš esmės atveria vietinį failą, mišrią failą, nuotolinį failą (iš viso 3 failus) kiekvienam prieštaraujančiam failui. Vietiniai ir nuotoliniai failai skirti tik nuorodoms, o jų pagalba galite pasirinkti, ką įtraukti (ar ne) į mišrią failą. Ir tiesiog išsaugokite ir uždarykite failą.

15
03 дек. Atsakymą pateikė Pawan Seerwani 03 dec. 2014-12-03 22:04 '14, 10:04 PM 2014-12-03 22:04

Turite vietinių failų, kuriuos reikia sujungti, kad galėtumėte traukti. Galite patikrinti failus ir ištraukti vietinių failų perrašymą.

 git checkout app/config/app.php app/config/database.php app/routes.php git pull origin master 
5
15 окт. atsakymas suteiktas Nick 15 d. 2014-10-15 10:32 '14, 10:32 2014-10-15 10:32

Jei norite ištrinti nuotolinį filialą vietiniam paleidimui (pvz., Testavimui ar bandymui) ir kai $ git pull gauti vietinius sujungimo konfliktus:

 $ git checkout REMOTE-BRANCH $ git pull (you get local merge conflicts) $ git reset --hard HEAD (discards local conflicts, and resets to remote branch HEAD) $ git pull (now get remote branch updates without local conflicts) 
2
03 авг. atsakymas, kurį pateikė user5245397 03 rug . 2016-08-03 18:50 '16 at 18:50 2016-08-03 18:50

Jei nenorite sujungti pakeitimų ir vis dar norite atnaujinti savo vietinį, eikite į komandą.

 git reset HEAD —hard 

Tai atkurs vietinį HEAD, o tada ištraukite konsolę naudodami git pull!

1
11 июля '16 в 15:51 2016-07-11 15:51 Atsakymą pateikė Santosh liepos 16 d., 16 val. 15:51 2016-07-11 15:51

Turėjau tą pačią problemą
Mano atveju, atlikite šiuos veiksmus:

  • Pašalintas visas failas, kuris veikia su simboliu U (neprisijungus). as-

 U project/app/pages/file1/file.ts U project/www/assets/file1/file-name.html 
  1. Ištraukite kodą iš šeimininko
 $ git pull origin master 
  1. Patikrinta būklė
  $ git status 

Čia yra pranešimas, kuris pasirodė -
ir atitinkamai turi 2 ir 1 skirtingas fiksacijas.
(use "git pull" to merge the remote branch into yours)
Jūs turite neištrinamų takų.
(fix conflicts and run "git commit")

Fiksuoti keliai:
(jei norite pažymėti leidimą, naudokite „git add ...“

 both modified: project/app/pages/file1/file.ts both modified: project/www/assets/file1/file-name.html 
  1. Pridėjo visi nauji pakeitimai -
  $ git add project/app/pages/file1/file.ts project/www/assets/file1/file-name.html 
  1. Norėdami pataisyti pakeitimus ant galvos -
 $ git commit -am "resolved conflict of the app." 
  1. Paspaustas kodas -
 $ git push origin master 

Kas gali išspręsti problemą su šiuo vaizdu - 2019

Jei įvyksta sujungimo konfliktas, galite atidaryti atskirą failą. Gausite simbolius "<<<< arba → → →>". Jie susiję su jūsų pakeitimais ir nuotolinio valdymo pulto pakeitimais. Galite rankiniu būdu redaguoti norimą dalį. tada išsaugokite failą ir tada: git add

Susijungimo konfliktai bus išspręsti.

0
11 февр. atsakymas yra dfordevy 11 vasaris 2016-02-11 12:44 '16 at 12:44 2016-02-11 12:44