Update Git ramuri de master

Am'm noi de la Git, iar acum am'm in aceasta situatie:

  • Am patru ramuri (master, b1, b2, și b3).
  • După ce am lucrat la b1-b3, mi-am dat seama ca am ceva să se schimbe pe ramură de master care ar trebui să fie în toate celelalte ramuri.
  • Am schimbat ceea ce am nevoie de la "maestru" și... aici e problema mea:

Cum pot actualiza toate celelalte ramuri cu "maestrul" codul de ramură?

Comentarii la întrebare (2)
Soluția

Aveți două opțiuni:

Prima este o unificare, dar acest lucru creează un plus de comite de unificare.

Checkout fiecare ramură:

git checkout b1

Apoi merge:

git merge origin/master

Apoi împingeți:

git push origin b1

Alternativ, puteți face o schimbare de bază:

git fetch
git rebase origin/master
Comentarii (7)

Ai practic două opțiuni:

  1. Îmbinați. Care este de fapt destul de simplu și perfect locale funcționare:

git checkout b1 git merge maestru

repeta pentru b2 și b3

Acest lucru lasă istoria exact cum s-a întâmplat: Ai incarcatori de master, ai făcut modificări la toate ramurile, și în cele din urmă a inclus modificări la maestru în toate cele trei ramuri.

git pot descurca în această situație într-adevăr ei bine, acesta este conceput pentru îmbină întâmplă în toate direcțiile, în același timp. Puteți avea încredere în a fi capabil de a obține toate firele împreună în mod corect. Pur și simplu nu-mi pasă dacă filiala " b1 "fuzionează" maestru " sau "maestru" fuzionează "b1", de unificare a comis arata toate la fel la git. Singura diferență este, ceea ce ramură se termină arătând spre această îmbinare a comis-o.

  1. Ai rebazare. Persoanele cu un SVN, sau similare de fundal găsi acest lucru mai intuitiv. Comenzile sunt analogice la unificare caz:

git checkout b1 git rebazare master

repeta pentru b2 și b3

Oameni ca această abordare, deoarece păstrează o istorie liniară în toate ramurile. Cu toate acestea, acest liniare istoria este o minciună, și ar trebui să fie conștienți de faptul că acesta este. Luați în considerare acest lucru comite grafic:

A --- B --- C --- D <-- master \ -- E --- F --- G <-- b1

Unificare rezultate în adevărata istorie:

A --- B --- C --- D <-- master \ \ -- E --- F --- G + - H <-- b1

De rebazare, cu toate acestea, vă oferă această istorie:

A --- B --- C --- D <-- master \ -- E' --- F' --- G' <-- b1

Ideea este, că se angajează E&#39;", "F&#39;" și " G&#39; niciodată n-a existat cu adevărat, și probabil nu a fost testat niciodată. Ele nici măcar nu pot compila. Acesta este, de fapt destul de ușor de a crea sens se angajează printr-o schimbare de bază, mai ales atunci când se schimbă în "maestru" sunt importante pentru dezvoltarea înb1`.

Consecința poate fi, pe care le puteți't distinge care dintre cele trei comite "E", " F " și " G " de fapt, a introdus o regresie, diminuând valoarea de git bisect.

Eu nu spun că nu ar trebui't folosi git rebazare`. A folosit-o. Dar ori de câte ori veți face folosiți, trebuie să fie conștienți de faptul că ai mințit despre istorie. Și tu ar trebui cel puțin să alcătuiască testa noul comite.

Comentarii (8)

`git rebazare master este modul corect de a face acest lucru. Unirea ar însemna un comis-ar fi creat pentru a îmbina, în timp ce rebasing nu ar fi.

Comentarii (5)

Daca'am fost de lucru pe o ramură pe și de pe, sau o mulțime s-a întâmplat în alte ramuri, în timp ce tu'am lucrat la ceva, l's cel mai bun pentru rebazare filiala pe maestru. Acest lucru ține de istorie ordonat și de a face lucrurile mult mai ușor să urmeze.

git checkout master
git pull
git checkout local_branch_name
git rebase master
git push --force # force required if you've already pushed

Note:

  • Don't rebazare ramuri care te'am colaborat cu ceilalți.
  • Ar trebui să-rebazare pe ramura la care va fi absorbit care nu poate fi întotdeauna stăpânul.

Nu's un capitol pe rebasing la http://git-scm.com/book/ch3-6.html și o mulțime de alte resurse de pe web.

Comentarii (0)

@cmaster făcut cel mai elaborat raspuns. Pe scurt:

git checkout master #
git pull # update local master from remote master
git checkout 
git merge master # solve merge conflicts if you have`

Tu nu ar trebui să rescrie ramură istoria, în loc să le păstreze în starea actuală pentru referinte viitoare. În timp ce fuzionează de a stăpâni, se creează o suplimentare a comis, dar că este ieftin. Se angajează nu costa.

Comentarii (0)

Pentru a actualiza alte ramuri, cum ar fi (backup) cu ramura master copie. Puteți urmați oricum (rebazare sau merge)...

  1. Nu rebazare (nu va't fi orice suplimentare a comis făcut să sucursala de rezervă).
  2. Merge ramuri (nu va fi un plus comite în mod automat la rezervă filială).

Notă : Rebazare nu este nimic, dar a stabilit o nouă bază (o nouă copie)

git checkout backup git merge maestru git push

(Repetați pentru alte ramuri dacă orice ca backup2 & etc..,)

git checkout backup git rebazare master git push

(Repetați pentru alte ramuri dacă orice ca backup2 & etc..,)

Comentarii (0)

Puteți fuziona, sau se poate aplica individual se angajează pe ramuri cu ajutorul git cherry-pick.

Comentarii (0)

Există două opțiuni pentru această problemă.

  1. git rebazare

  2. git merge

Numai cu dif de mai sus, atât în caz de fuziune, va avea suplimentar se angajeze în istorie

  1. git checkout ramură(b1,b2,b3)

  2. git rebazare origine/master (În caz de conflicte rezolva la nivel local de a face git rebazare-continua)

  3. git push

Alternativ, git merge opțiune este similară moda

  1. git checkout "your_branch"(b1,b2,b3)

  2. git merge maestru

  3. git push

Comentarii (0)