Git, kad išspręstumėte konfliktą su -ours / - naudojimu visiems failams

Ar yra būdas išspręsti konfliktus dėl visų failų, naudojančių kasos --ours ir --theirs ? Žinau, kad galite tai padaryti atskiriems failams, bet nepavyko rasti būdų tai padaryti visiems.

64
14 июля '14 в 21:57 2014-07-14 21:57 exe163 nustatytas liepos 14 d. 14 val. 21:57 2014-07-14 21:57
@ 4 atsakymai

Tiesiog grep per darbo katalogą ir nusiųskite rezultatą per xargs komandą:

 grep -lr '<<<<<<<' . | xargs git checkout --ours 

arba

 grep -lr '<<<<<<<' . | xargs git checkout --theirs 

Kaip tai veikia: grep ieškos kiekvieno failo dabartiniame kataloge ( . ) Ir rekursiškai ( -r vėliava), kurie ieško konfliktų žymenų (eilutė „<<<<<<<< lt; <<<“).

-l arba --files-with-matches vėliava sukelia grep spausdinti tik failo, kuriame buvo nustatyta eilutė, pavadinimą. Nuskaitymas sustabdomas po pirmosios rungtynės, todėl kiekvienas suderintas failas rodomas tik vieną kartą.

Tada atitinkami failų pavadinimai yra >> xargs , įrankis, kuris padalina įvesties srauto kanalus į atskirus argumentus, skirtus git checkout --ours arba - --theirs

Daugiau apie šią nuorodą .

Kadangi tai būtų labai nepatogu įvesti kiekvieną kartą komandinėje eilutėje, jei ją naudosite dažnai, gali būti malonu sukurti pasirinktinai slapyvardį : Bash yra normalu.

Šis metodas turėtų veikti bent jau Git versija 2.4.x

61
14 июля '14 в 22:03 2014-07-14 22:03 atsakymą Dmitrijus pateikė liepos 14 d. 14 d. 22:03 2014-07-14 22:03

Galite -Xours arba -Xtheirs su git merge . Taigi:

  • nutraukti esamą sujungimą (pvz., su git reset --hard HEAD )
  • sujungti naudodami pageidaujamą strategiją („ git merge -Xours arba „ git merge -Xtheirs )
border=0

ATSAKOMYBĖ: -Xours , galite pasirinkti tik vieną variantą: -Xours arba -Xtheirs , naudoti kitą strategiją, turite, žinoma, eiti į bylą byla.

Nežinau, ar yra būdas checkout , bet nuoširdžiai nemanau, kad tai labai naudinga: pasirinkus strategiją, naudodami komandą „Checkout“, naudinga, jei jums reikia skirtingų sprendimų skirtingiems failams, kitaip tik sujungimo strategija.

30
14 июля '14 в 22:26 2014-07-14 22:26 atsakymas yra duotas „ ThanksForAllTheFish“ liepos 14 d., 14 val.

git checkout --[ours/theirs] . darys tai, ko norite, kol esate visų konfliktų šaknis. mūsų / jų veikia tik nesusijusius failus, todėl jums nereikia problemų su grep / find / etc

20
07 янв. Atsakymas, kurį pateikė Cory Petosky Jan 07 2016-01-07 23:49 '16 at 23:49 PM 2016-01-07 23:49
 git diff --name-only --diff-filter=U | xargs git checkout --theirs 

Atrodo, jums reikia atlikti šį darbą. Atminkite, kad norint tai pasiekti, turite būti cd'ed į git saugyklos šakninį katalogą.

1
12 сент. Atsakymą pateikė Peter rugsėjo 12 d 2017-09-12 15:56 '17 at 15:56 2017-09-12 15:56