it-swarm.com.de

Git zieht einen bestimmten Zweig von GitHub ab

Ich habe ein Projekt mit mehreren Niederlassungen. Ich habe sie zu GitHub gedrängt, und jetzt, wo jemand anderes an dem Projekt arbeitet, muss ich ihre Zweige von GitHub ziehen. Es funktioniert gut in Master. Angenommen, jemand hat einen Zweig xyz erstellt. Wie kann ich Zweig xyz aus GitHub ziehen und in Zweig xyz auf meiner localhost zusammenführen?

Ich habe hier tatsächlich meine Antwort: Schiebe und ziehe Äste in Git

Ich bekomme aber einen Fehler "! [Abgelehnt]" und etwas über "Nicht-Schnellvorlauf".

Irgendwelche Vorschläge?

491
tybro0103

Aber ich bekomme eine Fehlermeldung "! [Abgelehnt]" und etwas über "Nicht-Schnellvorlauf"

Das liegt daran, dass Git die Änderungen aus den Zweigen nicht mit Ihrem aktuellen Master zusammenführen kann. Nehmen wir an, Sie haben den Zweig master ausgecheckt, und Sie möchten den entfernten Zweig other-branch zusammenführen. Wenn du das machst:

$ git pull Origin other-branch

Git macht im Grunde Folgendes:

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

Das heißt, ein pull ist nur ein fetch, gefolgt von einem merge. Wenn pulling, wird Git nur merge other-branch wenn ein SchnellvorlaufMerge durchführen kann. Ein Fast-ForwardMerge ist ein Zusammenführen, bei dem der Kopf des Zweigs, in den Sie einzufügen möchten, ein direkter Nachkomme ist des Kopfes des Zweigs, den Sie zusammenführen möchten. Wenn Sie beispielsweise über diesen Verlaufsbaum verfügen, führt das Zusammenführen von other-branch zu einer Zusammenführung mit schnellem Vorlauf:

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

Dies wäre jedoch nicht eine schnelle Zusammenführung:

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

fetch the remote branch:

$ git fetch Origin other-branch

Dann fügen Sie es in Ihren aktuellen Zweig ein (ich nehme an, das ist master) und beheben Sie alle Zusammenführungskonflikte:

$ git merge Origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!
583
mipadi

Verfolgen Sie einfach Ihre entfernten Zweige explizit und ein einfacher git pull macht genau das, was Sie möchten:

git branch -f remote_branch_name Origin/remote_branch_name
git checkout remote_branch_name

Letzteres ist eine lokale Operation.

Oder noch besser in die GitHub-Dokumentation zu forking :

git branch -f new_local_branch_name upstream/remote_branch_name
268
innaM

Mit den folgenden Befehlen können Sie einen Zweig in einen Zweig ziehen.

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

git pull Origin xyz:xyz

Wenn Sie sich in der Hauptniederlassung befinden, können Sie auch zuerst eine Niederlassung auschecken:

git checkout -b xyz

Dadurch wird ein neuer Zweig "xyz" vom Master erstellt und direkt ausgecheckt.

Dann machst du:

git pull Origin xyz

Dadurch wird der neue Zweig zu Ihrem lokalen Zweig xyz gezogen.

100
Robert Cabri

Der beste Weg ist:

git checkout -b <new_branch> <remote repo name>/<new_branch>
80
mohit

git fetch greift die neueste Liste der Zweige auf.

Jetzt können Sie git checkout MyNewBranch 

Erledigt :)


Weitere Informationen finden Sie in den Dokumenten: git fetch

32
Bradley Flood

Ich bin nicht sicher, ob ich das Problem vollständig verstehe, aber das Ziehen eines vorhandenen Zweigs geschieht so (zumindest funktioniert es für mich :)

git pull Origin BRANCH

Dies setzt voraus, dass Ihre lokale Niederlassung aus Origin/BRANCH erstellt wird.

29
Alex N.

Dies hat mir geholfen, einen entfernten Zweig zu bekommen, bevor ich ihn mit anderen zusammenfügte:

git fetch repo xyz:xyz
git checkout xyz
11
git pull <gitreponame> <branchname>

Normalerweise, wenn Sie Ihrem Code nur Repo zugewiesen haben, lautet das Gitreponame Origin.

Wenn Sie an zwei Repos arbeiten, von denen eines lokal ist und ein anderes Remote, so können Sie die Repos-Liste über git remote -v überprüfen. Dies zeigt, wie viele Repos Ihrem aktuellen Code zugewiesen sind.

BranchName sollte im entsprechenden Gitreponame vorhanden sein.

sie können die folgenden zwei Befehle verwenden, um Repos hinzuzufügen oder zu entfernen

git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
2
prathap

sie können auch tun

git pull -r Origin master

ggf. Zusammenführungskonflikte beheben

git rebase --continue

-r ist für rebase . Dadurch wird die Struktur von verzweigt

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

zu

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

Dies wird zu einer saubereren Geschichte führen. Hinweis: Falls Sie Ihren anderen Zweig bereits zu Origin (oder einer anderen Fernbedienung) verschoben haben, müssen Sie möglicherweise den Zweig Push nach dem Rebase erzwingen.

git Push -f Origin other-branch
1
PKV

Einfach ausgedrückt: Wenn Sie den Zweig the_branch_I_want aus GitHub ziehen möchten:

git fetch Origin
git branch -f the_branch_I_want Origin/the_branch_I_want
git checkout the_branch_I_want
0
Adrien Renaud

Ich tat 

git branch -f new_local_branch_name Origin/remote_branch_name

Anstatt 

git branch -f new_local_branch_name upstream/remote_branch_name

Wie von @innaM vorgeschlagen. Als ich die Upstream-Version verwendet habe, stand 'fatal: Kein gültiger Objektname:' upstream/remote_branch_name ''. Ich habe git fetch Origin nicht als Kommentar vorgeschlagen, sondern stattdessen einfach upstream durch Origin ersetzt. Ich denke, sie sind gleichwertig.

0
Vicky