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.

Sack
quelle

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).

urschrei
quelle
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>
Svenito
quelle
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 = [email protected]:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

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

[remote "somebody"]
        url = [email protected]:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*
Ian Will
quelle
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
Eneko Alonso
quelle
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
troelskn
quelle
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 = [email protected]:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = [email protected]:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = [email protected]:<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>
okor
quelle
Das ist so ziemlich das Gleiche wie die akzeptierte Antwort, nur dass die Fernbedienung, von der Sie abrufen, nicht als "Upstream" bezeichnet wird.
Poke