Am un proiect cu mai multe ramuri. Am'am fost împingându-le la GitHub, și acum că cineva este de lucru pe proiect am nevoie pentru a trage ramurile lor de la GitHub. Acesta funcționează bine în maestru. Dar să zicem că cineva a creat o ramură "xyz". Cum pot trage ramura " xyz "de la GitHub și fuziona într-sucursala" xyz " pe "localhost"?
Am raspuns aici: https://stackoverflow.com/questions/1072261/push-and-pull-branches-in-git
Dar primesc o eroare "! [respins]" și ceva despre "non fast forward".
Orice sugestii?
Dar primesc o eroare "! [respins]" și ceva despre "non fast forward"
Ca's pentru Git poate't îmbinați modificările din ramurile în actualul master. Las's spun te'am verificat filiala "maestru", și doriți să fuzioneze în ramură de la distanță alte-filiala
. Atunci când faci acest lucru:
$ git pull origin other-branch
Git este, practic, face acest lucru:
$ git fetch origin other-branch && git merge other-branch
Asta este, un "pull" este doar un "aport", urmat de un merge
. Cu toate acestea, atunci când "trage" -ing, Git va doar merge alte-filiala
if se poate efectua o fast-forward merge. O fast-forward unificare este o unificare în care șeful filialei sunteți încercarea de a fuziona într-un descendent direct de șef al sucursalei care doriți să le îmbinați. De exemplu, dacă aveți această istorie copac, apoi fuzionează alte-filiala
ar duce la un fast-forward merge:
O-O-O-O-O-O
^ ^
master other-branch
Cu toate acestea, acest lucru ar nu fi un fast-forward merge:
v master
O-O-O
\
\-O-O-O-O
^ other-branch
Pentru a rezolva problema, în primul rând aduc la distanță de ramură:
$ git fetch origin other-branch
Apoi se merge în ramură de curent (I'll să presupunem că's "maestru"), și de a rezolva orice îmbinare a conflictelor:
$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit # And commit the merge!
Pur și simplu urmăriți de la distanță ramuri în mod explicit și un simplu git pull
va face doar ceea ce vrei:
git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name
Acesta din urmă este o operațiune locală.
Sau chiar mai potrivit în cu GitHub documentația privind bifurcare:
git branch -f new_local_branch_name upstream/remote_branch_name
Ai putea trage o ramură la ramură cu următoarele comenzi.
git pull {repo} {remotebranchname}:{localbranchname}
git pull origin xyz:xyz
Atunci când sunteți pe ramura de master ai putea, de asemenea, prima verificare o ramură, cum ar fi:
git checkout -b xyz
Acest lucru creează o nouă filială, "xyz", de master și direct o verifică.
Apoi faci:
git pull origin xyz
Aceasta trage nouă ramură a local " xyz " ramură.
git fetch
va apuca cea mai recentă listă de ramuri.
Acum puteți git checkout MyNewBranch
Done :)
Pentru mai multe informatii vezi docs: git fetch
Eu nu sunt sigur că am înțeles pe deplin problema, dar trăgând existent ramură se face astfel (cel puțin pentru mine :)
git pull origin BRANCH
Acest lucru este presupunând că filiala locală este creat de origine/de RAMURĂ.
git pull <gitreponame> <branchname>
De obicei, dacă aveți doar repo atribuit codul apoi gitreponame ar fi originea.
Dacă sunteți de lucru pe două repo's place este una locală și una la distanță ca tine poate verifica repo's lista de git remote -v. acest lucru arată cât de multe repo's sunt atribuite actualul cod.
BranchName ar trebui să există în corespunzătoare gitreponame.
puteți utiliza următoarele două comenzi pentru a adăuga sau elimina repo's
git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
puteți face, de asemenea,
git pull -r origin master
fix merge conflicte, dacă orice
git rebase --continue
-r este pentru rebazare. Acest lucru va face să vă structură de ramură din
v master
o-o-o-o-o
\o-o-o
^ other branch
pentru a
v master
o-o-o-o-o-o-o-o
^ other branch
Acest lucru va duce la un aspirator de istorie. Notă: în cazul În care aveți deja l-a împins pe celălalt-ramura sa de origine( sau orice alta telecomanda), va trebui să vigoare împinge ramură după rebazare.
git push -f origin other-branch
Am făcut
git branch -f new_local_branch_name origin/remote_branch_name
În loc de
git branch -f new_local_branch_name upstream/remote_branch_name
Cum a sugerat de către @innaM.
Când am folosit în amonte versiune, a spus 'fatală: Nu un obiect valid nume: 'din amonte/remote_branch_name''. Nu am facut git fetch origine
ca un comentariu sugerat, dar în loc de pur și simplu înlocuit "în amonte" cu "origine". Cred că ele sunt echivalente.