Git pull a certain branch from GitHub

Mam projekt z wieloma gałęziami. Pchałem je do GitHub, a teraz, gdy ktoś inny nad nimi pracuje, muszę zrobić pull z Githuba. To działa dobrze w Mistrzu. Ale powiedzmy, że mam oddział xyz. Jak mogę pobrać gałąź xyz z GitHub i połączyć ją z gałąź xyz na moim localhost?

Mam tu swoją odpowiedź: Push and pull branches in Git

Ale dostaję błąd"! [odrzucony] "i coś o" non fast naprzód".

Jakieś sugestie?

Author: Community, 2009-11-10

10 answers

Ale dostaję błąd"! [odrzucony] "i coś o" non fast forward "

To dlatego, że Git nie może scalić zmian z gałęzi do aktualnego Mastera. Załóżmy, że sprawdziłeś gałąź master i chcesz połączyć się w zdalnej gałęzi other-branch. Kiedy to robisz:

$ git pull origin other-branch

Git w zasadzie robi to:

$ git fetch origin other-branch && git merge other-branch

To znaczy pull jest po prostu fetch, po którym następuje merge. Jednakże, gdy pull-ing, Git będzie tylko scalał other-branch if it can performing a fast-forward merge. A fast-forward merge to połączenie, w którym głowa gałęzi, do której próbujesz się połączyć, jest bezpośrednim potomkiem głowy gałęzi, do której chcesz się połączyć. Na przykład, jeśli masz to drzewo historii, scalenie other-branch spowoduje szybkie scalanie do przodu:

O-O-O-O-O-O
^         ^
master    other-branch

To jednak Nie będzie fast-forward merge:

    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch

Aby rozwiązać swój problem, najpierw Pobierz oddział zdalny:

$ git fetch origin other-branch

Następnie połącz go z bieżącą gałęzią (zakładam, że jest to master) i napraw wszelkie konflikty scalania:

$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!
 535
Author: mipadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 19:17:47

Po prostu śledź swoje zdalne gałęzie wprost, a proste git pull zrobi to, co chcesz:

git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name

Lub jeszcze bardziej pasuje do dokumentacji Githuba na temat forkingu :

git branch -f new_local_branch_name upstream/remote_branch_name
 259
Author: innaM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 22:26:59

Możesz przeciągnąć gałąź do gałęzi za pomocą następujących poleceń.

git pull {repo} {remotebranchname}:{localbranchname}

git pull origin xyz:xyz

Kiedy znajdujesz się na gałęzi master, Możesz również najpierw sprawdzić gałąź taką jak:

git checkout -b xyz

Tworzy to nową gałąź," xyz", z master i bezpośrednio ją sprawdza.

Potem robisz:

git pull origin xyz
To przyciąga nową gałąź do twojej lokalnej gałęzi.
 97
Author: Robert Cabri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 22:25:15

Najlepszy sposób to:

git checkout -b <new_branch> <remote repo name>/<new_branch>
 71
Author: mohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 22:27:40

Nie jestem pewien, czy w pełni rozumiem problem, ale wyciąganie istniejącej gałęzi odbywa się w ten sposób (przynajmniej u mnie działa:)

git pull origin BRANCH

Zakłada się, że lokalna gałąź jest utworzona z origin / BRANCH.

 29
Author: Alex N.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 22:23:03

git fetch pobierze najnowszą listę oddziałów.

Teraz możesz git checkout MyNewBranch

Zrobione:)


aby uzyskać więcej informacji zobacz dokumenty: git fetch

 27
Author: Bradley Flood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-27 05:38:00

To pomogło mi uzyskać zdalną gałąź przed połączeniem jej z innym:

git fetch repo xyz:xyz
git checkout xyz
 8
Author: anatoly techtonik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-15 21:25:49
git pull <gitreponame> <branchname>

Zazwyczaj jeśli do Twojego kodu przypisane jest tylko repo, to gitreponame będzie origin.

Jeśli pracujesz na dwóch repo jak jeden jest lokalny a drugi dla zdalnego jak możesz sprawdzić listę repo z git remote-v . pokazuje, ile repo jest przypisanych do bieżącego kodu.

Nazwa gałęzi powinna istnieć w odpowiedniej nazwie gitreponame.

Możesz użyć następujących dwóch poleceń, aby dodać lub usunąć repo

git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
 2
Author: prathap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-08 04:27:00

Możesz również zrobić

git pull -r origin master

Fix merge conflicts if any

git rebase --continue

-r oznacza rebase. Spowoduje to utworzenie struktury gałęzi z

        v  master       
o-o-o-o-o
     \o-o-o
          ^ other branch

Do

        v  master       
o-o-o-o-o-o-o-o
              ^ other branch
To doprowadzi do czystszej historii. Uwaga: jeśli już przesunąłeś swoją gałąź other - do origin (lub jakiegokolwiek innego pilota), być może będziesz musiał wymusić wypchnięcie gałęzi po rebase.
git push -f origin other-branch
 1
Author: PKV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-28 09:10:46

Zrobiłem

git branch -f new_local_branch_name origin/remote_branch_name

Zamiast

git branch -f new_local_branch_name upstream/remote_branch_name

Zgodnie z sugestią @innaM. Kiedy używałem wersji upstream, było napisane "fatal: not a valid object name: "upstream / remote_branch_name". Nie zrobiłem git fetch origin zgodnie z sugestią komentarza, ale zamiast tego po prostu zamieniłem upstream na origin. Myślę, że są równoważne.

 0
Author: Vicky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 15:44:58