Kas yra geriausias (ir saugiausias) būdas sujungti „Git“ filialą į vedlį?

Naujas filialas sukurtas iš master , mes jį vadiname test .

Yra keletas kūrėjų, kurie perkelia į master arba sukuria kitus filialus, ir tada sujungia į master .

Tarkime, kad darbas test trunka kelias dienas ir norite nuolat atnaujinti test naudodamasis master viduje.

test git pull origin master .

1 klausimas. Ar tai teisinga? Kiti kūrėjai gali lengvai dirbti su tais pačiais failais, su kuriais dirbau. Beje


Vyksta mano darbas test , ir aš esu pasirengęs vėl sujungti su master . Štai du būdai, kaip galiu galvoti apie:

A:

 git checkout test git pull origin master git push origin test git checkout master git pull origin test 

B:

 git checkout test git pull origin master git checkout master git merge test 

Nenaudoju --rebase nes, mano nuomone, perkrovimas gaus pakeitimus iš master ir įdės mano viršutinę dalį, todėl jis gali perrašyti kitų žmonių padarytus pakeitimus.

2 klausimas. Kuris iš šių dviejų metodų yra teisingas? Koks skirtumas?

Tikslas - išlaikyti test šaką atnaujinamą su master vykstančiais dalykais, o vėliau galiu sujungti juos atgal į master , tikėdamasis, kad grafikas būtų kuo tiesesnis.

1682
09 апр. nustatyti moe 09 balandžio. 2011-04-09 03:01 '11 at 3:01 2011-04-09 03:01
@ 9 atsakymai

Kaip tai padaryti

 git checkout master git pull origin master git merge test git push origin master 

Jei turiu vietinį padalinį iš nuotolinio, nesu patenkintas kitų filialų sujungimu nei su nuotoliniu. Be to, norėčiau nekreipti dėmesio į mano pakeitimus, kol nesu patenkintas tuo, ką noriu paspaudti, ir taip pat nenoriu visai stumti dalykų, tai tik man ir mano vietinei saugyklai. Jūsų aprašyme, atrodo, kad test tik jums? Todėl nėra pagrindo jį paskelbti.

„Git“ visada stengiasi gerbti jūsų ir kitus pokyčius, taip pat --rebase . Nemanau, kad galiu tai teisingai paaiškinti, todėl pažvelkite į „Git-Rebasing“ knygą ar git-juba knygą: įžangą, kad būtų galima trumpai aprašyti. Tai puiki funkcija.

2477
09 апр. atsakymas duotas KingCrunch 09 balandžio. 2011-04-09 03:45 '11 at 3:45 am 2011-04-09 03:45

Tai labai praktinis klausimas, bet visi pirmiau pateikti atsakymai nėra praktiški.

patinka

 git checkout master git pull origin master git merge test git push origin master 

Šis požiūris turi du klausimus :

  1. Tai nėra saugu, nes mes nežinome, ar egzistuoja kokie nors konfliktai tarp bandymų ir pagrindinio filialo.

  2. Jis „išspaudė“ visus bandymus įpareigoja į vieną susijungimo sąjungą, susijusią su šeimininku; tai yra pagrindiniame filiale, nematome visų bandymo šakos pakeitimų žurnalų.

Todėl, kai įtariame, kad kils tam tikrų konfliktų, galime atlikti šias git operacijas:

 git checkout test git pull git checkout master git pull git merge --no-ff --no-commit test 

Nusausinkite bandymo merge prieš commit , venkite greito persiuntimo su --no-ff ,

Jei kyla konfliktas, galime paleisti „ git status kad patikrintume konfliktų informaciją ir bandytume išspręsti

 git status 

Kai išsprendžiame konfliktus arba jei nėra konflikto, mes juos vykdome ir push .

 git commit -m 'merge test branch' git push 
border=0

Tačiau šis metodas praranda bandymų skyriuje užregistruotų pokyčių istoriją, o tai leis kitiems kūrėjams sunkiai suprasti projekto istoriją.

Todėl geriausias būdas yra naudoti rebase vietoj merge (tarkime, kai šiuo metu išsprendžiame šakos konfliktus).

Toliau pateikiamas paprastas pavyzdys, kaip atlikti išplėstines operacijas, žr. „ Http://git-scm.com/book/en/v2/Git-Branching-Rebasing“

 git checkout master git pull git checkout test git pull git rebase -i master git checkout master git merge test 

Taip, kai padarysite viršų, visi baigiamieji egzaminai bus perkelti į pagrindinį kapitono padalinį. Pagrindinis atkūrimo privalumas yra tai, kad jūs gaunate linijinę ir švaresnę projekto istoriją.

Vienintelis dalykas, kurio jums reikia vengti: niekada nenaudokite viešojo filialo kaip pagrindinio filialo.

Niekada nevykdykite šių operacijų :

 git checkout master git rebase -i test 

Išsami informacija apie https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing

programa:

304
14 марта '15 в 15:13 2015-03-14 15:13 atsakymą pateikė John Yin kovo 15 d. 15:13 2015-03-14 15:13

Nei draudimas, nei sujungimas neturėtų perrašyti pakeitimų niekam (nebent nuspręsite tai padaryti sprendžiant konfliktą).

Įprastas požiūris kuriant

 git checkout master git pull git checkout test git log master.. # if you're curious git merge origin/test # to update your local test from the fetch in the pull earlier 

Kai esate pasiruošęs susivienyti šeimininke,

 git checkout master git log ..test # if you're curious git merge test git push 

Jei esate susirūpinęs dėl to, kad kažką git merge --abort , git merge --abort - jums tinka.

Naudojant stumti ir traukti, kaip susijungimo priemonę, yra kvailas. Aš taip pat nežinau, kodėl jūs spaudžiate kilmės testą.

80
10 апр. atsakymas duotas raylu 10 Bal 2011-04-10 03:17 '11 at 3:17 2011-04-10 03:17

Pirma, norėčiau padaryti didžiausią įmanomą šaką. Paleiskite savo bandymus, įsitikinkite, kad valstybė yra tai, ką norite. Išvalykite naują gitskvošą .

Be KingCrunches atsakymo , siūlau naudoti

 git checkout master git pull origin master git merge --squash test git commit git push origin master 

Gali būti, kad daugelis įsipareigojo kitame filiale, kuris turėtų būti tik vienas įsipareigojimas pagrindiniame filiale. Jei norite, kad įvykių istorija būtų kuo švaresnė, jums gali prireikti skaldyti visus savo įsipareigojimus iš bandymo šakos į vieną fiksaciją pagrindiniame filiale (taip pat žr. „ Git: skvošas“ arba „ne skvošas“ ). Tada taip pat galite perrašyti įsipareigojimo pranešimą į kažką labai išraiškingo. Kažkas, ką lengva skaityti ir suprasti be kasti rakto.

Redaguoti: Jums gali būti įdomu

Taigi, „GitHub“, galiu padaryti tokius veiksmus dėl „ mybranch funkcijos mybranch :

Gaukite naujausius duomenis iš šaltinio

 $ git checkout master $ git pull origin master 

Rasti susijungimo maišą:

 $ git merge-base mybranch master c193ea5e11f5699ae1f58b5b7029d1097395196f $ git checkout mybranch $ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f 

Dabar įsitikinkite, kad tik pirmasis pick , kiti s :

 pick 00f1e76 Add first draft of the Pflichtenheft s d1c84b6 Update to two class problem s 7486cd8 Explain steps better 

Tada pasirinkite labai gerą įvykio pranešimą ir spustelėkite GitHub. Tada padarykite prašymą tempimui.

Sujungę paieškos užklausą, galite ją ištrinti vietoje:

 $ git branch -d mybranch 

ir github

 $ git push origin :mybranch 
30
21 апр. Martin Thoma atsakymas balandžio 21 d 2016-04-21 11:18 '16 at 11:18 2016-04-21 11:18

Tai yra darbo eiga, kurią naudoju savo darbe su komanda. Scenarijaus aprašymas. Pirma, kai baigiau darbą test , iš naujo įdiegiu vedlį, kad ištrauktumėte viską, kas buvo pridėta prie vedlio, kai dirbau test skyriuje.

git pull -r upstream master

Tai paskatins pagrindinio kompiuterio pakeitimus, nes padalijote test šaką ir pritaikysite juos, o tada pritaikykite atliktus pakeitimus, kad patikrintumėte dabartinę vedlio būseną. Gali būti prieštaravimų, jei kiti žmonės pakeitė tuos pačius failus, kuriuos redagavote teste. Jei yra, turėsite juos pataisyti rankiniu būdu ir padaryti. Kai tai padarysite, jums bus naudinga pereiti prie pagrindinio filialo ir sujungti test be problemų.

4
17 марта '16 в 1:27 2016-03-17 01:27 atsakymas djheru kovo 17 d. 16 d. 1:27 2016-03-17 01:27
 git checkout master git pull origin master # Merge branch test into master git merge test 

Po susiliejimo, jei failas yra pakeistas, tada sujungus jį bus įvykdyta klaida „Išspręsti konfliktą“

Taigi pirmiausia turite išspręsti visus savo konfliktus, tada dar kartą turite atlikti visus pakeitimus, o tada spustelėkite Gerai

 git push origin master 

Geriau, kad bandymų skyriuje pasikeitė, nes jis žinojo, kokius pakeitimus jis padarė.

1
07 апр. Atsakymą pateikė Vinay Sikarwar, balandžio 7 d. 2015-04-07 11:55 '15 at 11:55 2015-04-07 11:55

Senas siūlas, bet aš neradau būdų tai padaryti. Tai gali būti naudinga tiems, kurie dirba su peradresavimu ir nori sujungti visus įsipareigojimus iš vedlio viršaus. Jei yra vienas konfliktas, galite juos išspręsti kiekvienam įvykiui.

Gaukite atnaujintą kapitoną ir filialą:

 git checkout master git pull --rebase origin master git checkout <branch_name> git pull --rebase origin <branch_name> 

Sujunkite filialą vedlio viršuje:

 git checkout <branch_name> git rebase master git add . git rebase continue 

Jei per „Rebase“ susiduriate su konfliktais:

Pirma, išspręskite failo konfliktą. Tada:

 git add . git rebase --continue 

Baigę atnaujinimą, perkelkite filialą virš vedlio:

 git checkout master git rebase <branch_name> 
1
31 окт. Atsakymą pateikė Robin Wieruch spalio 31 d. 2018-10-31 07:14 '18, 07:14 2018-10-31 07:14

Norėčiau naudoti atkūrimo metodą. Daugiausia todėl, kad jis puikiai atspindi jūsų atvejį semantiškai, t.y. tai, ką norite padaryti, yra atnaujinti dabartinio filialo būseną ir „apsimesti“, tarsi jis būtų pagrįstas pastaruoju.

Todėl, net tikrinant master , norėčiau:

 git fetch origin git rebase -i origin/master # ...solve possible conflicts here 

Žinoma, tik pavyzdys iš šaltinio neatnaujina jūsų master vietos (nes nesujungia), tačiau tai yra visiškai normalu mūsų tikslams - norime išvengti perjungimo, kad sutaupytume laiko.

1
13 сент. Atsakymą pateikė user776686 September 13 2018-09-13 10:13 '18, 10:13 pm 2018-09-13 10:13

Tai lengva, atlikite šiuos veiksmus.

  • „Git“ apmokėjimo vedlys
  • „Git“ sujungimas
  • Git mygtuko pradžios pradžia ARBA Jei jis sukelia klaidą, galite ją priversti

„Git“ Spustelėkite Pradėti vedlį

Kas tai yra.

-38
03 дек. atsakymą pateikė Vinay Sikarwar 03 dec. 2017-12-03 06:28 '17 at 6:28 2017-12-03 06:28