Github: Importieren Sie den vorgelagerten Zweig in die Gabel


169

Ich habe eine Gabel ( origin) aus einem Projekt ( upstream) auf Github. Jetzt hat das Upstream-Projekt einen neuen Zweig hinzugefügt, den ich in meine Gabel importieren möchte. Wie mache ich das?

Ich habe versucht, die Fernbedienung auszuchecken und darüber einen Zweig zu erstellen, aber dadurch wird der Zweig so konfiguriert, dass git pushversucht wird, auf Folgendes zuzugreifen upstream:

git checkout upstream/branch
git checkout -b branch

bearbeiten

Vielleicht war das nicht klar, aber ich möchte den Zweig zu meinem lokalen Repository hinzufügen, damit ich ihn über origin(meine Gabelung) über pushen kann git push. Da vorgelagerte Repositorys normalerweise schreibgeschützt sind und Sie einen Beitrag leisten.

Ich möchte also im Grunde einen nicht existierenden Zweig auschecken, aus origindessen Inhalt gezogen wird upstream.

Antworten:


262
  1. Stellen Sie sicher, dass Sie den neuen Upstream- Zweig in Ihr lokales Repo gezogen haben :

    • Stellen Sie zunächst sicher , dass Ihr Arbeitsbaum sauber ist (Änderungen festschreiben / speichern / zurücksetzen).
    • Dann, git fetch upstreamum den neuen Upstream-Zweig abzurufen
  2. Erstellen Sie eine lokale Version des neuen Upstream-Zweigs ( newbranch) und wechseln Sie zu dieser :

    • git checkout -b newbranch upstream/newbranch
  3. Wenn Sie bereit sind, den neuen Zweig zum Ursprung zu verschieben :

    • git push -u origin newbranch

Der Schalter -u richtet die Verfolgung der angegebenen Fernbedienung ein (in diesem Beispiel origin).


6
Ich glaube , dass dies git fetch upstreamim ersten Schritt eine bessere Option ist, da danach git pull upstreammehr Maßnahmen git remote add ...für die upstream.
Alexander Pavlov

git pull upstream gibt zurück: You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.Das Hinzufügen des Zweigstellennamens am Ende des Befehls führt zu einer Zusammenführung des Zweigs im Upstream mit dem aktuellen lokalen Zweig, anstatt die Erstellung eines neuen lokalen Zweigs zu ermöglichen. Irgendwelche Ideen?
mMontu

1
Das Ersetzen git pull upstreamdurch git fetch upstreamlöste das Problem, und die folgenden Schritte funktionierten.
mMontu

Ich bekomme: fatal: Pfade können nicht aktualisiert und gleichzeitig zum Zweig "Upstream" gewechselt werden. Wollten Sie 'Upstream / Master' auschecken, was nicht als Commit aufgelöst werden kann?
sureshvv

1
@sureshvv Das liegt wahrscheinlich daran, dass Sie einen Remote-Verweis auf das Upstream-Repository mit dem Namen Upstream benötigen, bevor Sie dies tun können. Falls Sie dies nicht tun, fügen Sie auf diese Weise eine hinzu: git remote add upstream your_git_upstream_repository_url.git . Lesen Sie dies, wenn Sie diesbezüglich Erläuterungen benötigen.
Gabriel Rainha

7

ich würde ... benutzen

git checkout -b <new_branch> upstream/<new_branch>

Genau das habe ich versucht, noch bevor ich es in der Frage erklärt habe. es führt zu den gleichen Ergebnissen.
Poke

4

Ich hatte auch Probleme damit und Google hat mich hierher gebracht. Die Lösungen funktionierten jedoch nicht. Mein Problem war, dass beim Hinzufügen meines Upstreams meine Git-Konfiguration so eingerichtet wurde, dass nur der Master und nicht alle Zweige abgerufen werden. zB sah es so aus

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

Das folgende Bearbeiten von .git / config hat mein Problem behoben

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

Die folgenden Schritte haben bei mir gut funktioniert (vorausgesetzt, der Name des Upstream-Zweigs lautet branch):

$ git fetch upstream
$ git checkout branch
$ git push origin

1
Ich bekomme Git Fetch Upstream fatal: 'Upstream' scheint kein Git Repository fatal zu sein: Konnte nicht aus Remote-Repository lesen. Stellen Sie sicher, dass Sie über die richtigen Zugriffsrechte verfügen und das Repository vorhanden ist.
ThinkDigital

0

--track?

git branch --track branch upstream/branch

Vielleicht habe ich Sie falsch verstanden, aber wenn Sie das tun, wird der Zweig auf die gleiche Weise eingerichtet. mit pushpushen zu upstream.
Poke

Nein, ich glaube ich habe dich missverstanden.
Troelskn

0

Ich hatte ein etwas komplizierteres Szenario, in dem ich bereits eine upstreamDefinition in meiner Gabel hatte (aus dem kanonischen Repo), aber einen Zweig von einer anderen Gabel auschecken musste. Um dies zu erreichen, ist der Prozess etwas anders. Hier ist die Konfiguration, mit der ich gelandet bin:

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

Jetzt können Sie auch einen Zweig von der <other_user>Gabel aus auschecken.

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

Dadurch erhalten Sie einen lokalen Zweig, der von der Gabelung abgeleitet ist.

Um diesen lokalen Zweig zu pushen, musste ich mit meinem Push-Befehl spezifisch sein.

git push origin <branch>

Das ist so ziemlich das Gleiche wie die akzeptierte Antwort, nur dass die Fernbedienung, von der Sie abrufen, nicht als "Upstream" bezeichnet wird.
Poke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.