Koji je najbolji (i najsigurniji) način spajanja Gitove grane u čarobnjaka?

Nova grana je stvorena od master , mi ga zovemo test .

Postoji nekoliko programera koji ili prenose na master , ili stvaraju druge grane, a zatim se spajaju u master .

Pretpostavimo da rad na test traje nekoliko dana, a želite stalno ažurirati test koristeći naredbe unutar master .

Učinio bih git pull origin master s git pull origin master iz test .

Pitanje 1: Je li to točno? Drugi programeri mogu lako raditi s istim datotekama s kojima sam radio. Usput


Rad na test je pokrenut i spreman sam ga ponovno spojiti s master . Evo dva načina na koje mogu misliti:

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 

Ne koristim --rebase jer, po mom mišljenju, rebase će primiti promjene od master i staviti moje na to, tako da može prepisati promjene koje su napravili drugi ljudi.

Pitanje 2: Koja je od ove dvije metode u pravu? U čemu je razlika?

Cilj je ažurirati test granu sa stvarima koje se događaju u master , a kasnije ih mogu spojiti natrag u master , nadajući se da ću zadržati graf što je moguće više linearno.

1682
09 апр. set moe 09 apr. 2011-04-09 03:01 '11 u 3:01 2011-04-09 03:01
@ 9 odgovora

Kako bih to učinio

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

Ako imam lokalnu podružnicu udaljene, ne sviđa mi se spajanje drugih grana nego s udaljenom. Osim toga, ne bih inzistirao na svojim promjenama sve dok ne budem zadovoljan s onim što želim pritisnuti, ai ne bih uopće gurnuo stvari, ovo je samo za mene i moj lokalni repozitorij. U vašem opisu, čini se da je test samo za vas? Stoga nema razloga za objavljivanje.

git uvijek pokušava poštovati tvoje i druge promjene, a tako će i - --rebase . Mislim da to ne mogu ispravno objasniti, stoga pogledajte knjigu Git-Rebasing ili Git-ready knjigu: uvod u ponovno podizanje sustava za kratak opis. Ovo je prilično cool značajka.

2477
09 апр. odgovor je dan KingCrunch 09 apr. 2011-04-09 03:45 '11 u 3:45 am 2011-04-09 03:45

Ovo je vrlo praktično pitanje, ali svi gore navedeni odgovori nisu praktični.

kao

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

Ovaj pristup ima dva pitanja :

  1. To nije sigurno jer ne znamo postoje li sukobi između testne grane i glavne grane.

  2. On je "istisnuo" sve testove u jedno ujedinjenje unije na gospodaru; to jest, na glavnoj grani, ne možemo vidjeti sve dnevnike promjena ispitne grane.

Stoga, kad sumnjamo da će se pojaviti neki sukobi, možemo izvesti sljedeće operacije git:

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

Drain test merge prije commit , izbjegavanje brzog prosljeđivanja s --no-ff ,

Ako dođe do sukoba, možemo pokrenuti git status za provjeru informacija o sukobu i pokušati riješiti problem

 git status 

Kada rješavamo sukobe ili ako nema sukoba, commit i push .

 git commit -m 'merge test branch' git push 

No, ova metoda će izgubiti povijest promjena registriranih u testnoj grani, a to će učiniti da glavna grana otežava drugim programerima razumijevanje povijesti projekta.

Stoga je najbolji način koristiti rebase umjesto merge (pretpostavimo, kada smo u ovom trenutku riješili sukobe grana).

U nastavku je jednostavan primjer za proširene operacije, pogledajte 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 

Da, kada napravite vrh, svi završni ispiti će biti prebačeni u glavnu podružnicu majstora. Glavna prednost oporavka je da dobijete linearnu i čistu povijest projekta.

Jedino što trebate izbjegavati: nikada ne koristite rebase u javnoj grani kao glavnu granu.

Nikada ne izvodite sljedeće radnje :

 git checkout master git rebase -i test 

Pojedinosti o https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing

primjena:

304
14 марта '15 в 15:13 2015-03-14 15:13 odgovor je dao Ivan Yin 14. ožujka u 15:13 u 2015-03-14 15:13

Ni rebid, ni spajanje ne bi trebali prebrisati promjene za bilo koga (osim ako to ne učinite pri rješavanju sukoba).

Uobičajeni pristup u razvoju

 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 

Kada ste spremni ujediniti se u majstora,

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

Ako ste zabrinuti da nešto git merge --abort u spajanje, git merge --abort je tu za vas.

Korištenje guranja i povlačenja, kao sredstva spajanja, je glupo. Također ne znam zašto pritisnete test porijekla.

80
10 апр. odgovor dao raylu 10. \ t 2011-04-10 03:17 '11 u 3:17 2011-04-10 03:17

Prvo, napravio bih najveću moguću finu granu. Pokrenite testove, uvjerite se da je stanje ono što želite. Čisti novi git squash .

Osim KingCrunches odgovora , predlažem da koristite

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

Možda ste napravili mnogo urezivanja u drugoj grani, koja bi trebala biti samo jedna predaja u glavnoj grani. Da bi povijest urezivanja bila što čišća, možda ćete morati ugušiti sve svoje provjere iz ispitne grane u jednu fiksaciju u glavnoj grani (vidi također: Git: Squash ili ne squash? ). Tada također možete prepisati poruku urezivanja na nešto vrlo izražajno. Nešto što se lako čita i razumije bez kopanja kroz kôd.

Uredi: Možda ste zainteresirani

Tako na GitHubu završavam sljedeće za mybranch funkcije mybranch :

Preuzmite najnovije podatke iz izvora

 $ git checkout master $ git pull origin master 

Pronađite hash za spajanje:

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

Sada se pobrinite da je samo prvi pick , ostatak:

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

Zatim odaberite vrlo dobru poruku urezivanja i kliknite GitHub. Zatim podnesite zahtjev za istezanje.

Nakon spajanja zahtjeva za dohvat, možete ga izbrisati lokalno:

 $ git branch -d mybranch 

i na github

 $ git push origin :mybranch 
30
21 апр. odgovor dao Martin Thoma 21. travnja 2016-04-21 11:18 '16 u 11:18 2016-04-21 11:18

Ovo je tijek rada koji koristim u radu s timom. Skripta kao što opisujete. Prvo, kada sam završio rad na test , ponovno sam instalirao čarobnjaka da izvadi sve što je dodano čarobnjaku dok sam radio na test grani.

git pull -r upstream master

To će dovesti do promjena u nadređenom uređaju, budući da ste podijelili test granu i primijenili je, a zatim primijenili promjene koje ste napravili kako biste provjerili na vrhu trenutnog stanja čarobnjaka. Može doći do sukoba ako su drugi ljudi napravili promjene u istim datotekama koje ste uredili u testu. Ako postoji, morat ćete ih ispraviti ručno i obvezati. Nakon što to učinite, bit će vam korisno da se prebacite na glavnu granu i spojite test bez problema.

4
17 марта '16 в 1:27 2016-03-17 01:27 odgovor je djheru 17. ožujka u 1:27 2016-03-17 01:27
 git checkout master git pull origin master # Merge branch test into master git merge test 

Nakon spajanja, ako je datoteka izmijenjena, tada će se pri spajanju pojaviti pogreška "Rješavanje sukoba"

Dakle, prvo morate riješiti sve konflikte, a zatim morate ponovno napraviti sve promjene, a zatim kliknite

 git push origin master 

Bolje je tko je napravio promjene u ispitnoj grani, jer je znao što je napravio.

1
07 апр. Odgovor daje Vinay Sikarwar 07.04. 2015-04-07 11:55 '15 u 11:55 2015-04-07 11:55

Stara nit, ali nisam našla način da to učinim. To može biti korisno za one koji rade s rebasom i žele spojiti sve urezivanja iz grane na vrhu čarobnjaka. Ako postoji jedan sukob, možete ih riješiti za svaku obvezu.

Ažurirajte majstora i granu:

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

Spajanje grane na vrhu čarobnjaka:

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

Ako naiđete na sukobe tijekom Rebase:

Prvo riješite sukob u datoteci. tada je:

 git add . git rebase --continue 

Nakon dovršetka rebase pomaknite granu preko čarobnjaka:

 git checkout master git rebase <branch_name> 
1
31 окт. odgovor je dao Robin Wieruch 31. listopada 2018-10-31 07:14 '18 u 7:14 2018-10-31 07:14

Koristio bih metodu rebase. Uglavnom zato što savršeno odražava vaš slučaj semantički, tj. ono što želite učiniti jest ažurirati status trenutne podružnice i "pretvarati se" kao da se temelji na potonjem.

Stoga, bez provjere master , ja bih:

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

Naravno, samo uzorak iz izvora ne ažurira lokalno stanje vašeg master (jer se ne spaja), ali to je potpuno normalno za našu svrhu - želimo izbjeći prebacivanje kako bismo uštedjeli vrijeme.

1
13 сент. Odgovor daje korisnik776686 13. rujna 2018-09-13 10:13 '18 u 22:13 sati 2018-09-13 10:13

Lako je, samo slijedite ove korake.

  • Čarobnjak za provjeru Git
  • Git spajanje
  • Git gumb na početku izvornika ILI Ako ga pogriješi, možete ga i prisiliti

Git Kliknite Start Wizard

Što je to?

-38
03 дек. odgovor je dao Vinay Sikarwar 03 dec. 2017-12-03 06:28 '17 u 6:28 2017-12-03 06:28