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?
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 pull
ing, 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!
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
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.
Der beste Weg ist:
git checkout -b <new_branch> <remote repo name>/<new_branch>
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
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.
Dies hat mir geholfen, einen entfernten Zweig zu bekommen, bevor ich ihn mit anderen zusammenfügte:
git fetch repo xyz:xyz
git checkout xyz
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>
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
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
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.