Wie mache ich einen Klon mit einem Zweig rückgängig?

102

Ich habe ein Repo mit dem geklont

git clone -b <branch name> --single-branch <github url> <target directory>

Dies hat NUR diesen Zweig geklont, aber jetzt möchte ich zum Master und zu anderen Zweigen wechseln. Gibt es eine andere Möglichkeit, als den Rest des Repos zu klonen und den Rest des Repos neu zu klonen, um die Präferenz für einen einzelnen Zweig rückgängig zu machen?

danieltalsky
quelle

Antworten:

147

Sie können Git anweisen, alle Zweige wie folgt zu ziehen:

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

Wenn Sie hineinschauen .git/config, sieht es ungefähr so ​​aus:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = false
[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

Ich verglich dies mit einem vollständigen Klon und sah, dass der einzige Unterschied das "Abrufen" unter war [remote "origin"].

Hinweis: Ich verwende Git Version 1.8.2. Die Konfigurationsoptionen haben sich möglicherweise geändert, wenn Sie eine ältere Version von Git ausführen. Wenn meine Befehle nicht funktionieren, würde ich empfehlen, nachzuschauen, um .git/configzu sehen, ob Sie etwas Ähnliches sehen können.

sarahhodne
quelle
2
Ich wollte Ihnen nur einen besonderen Dank aussprechen, weil ich viel gelesen und gegoogelt habe und so etwas nicht finden konnte.
danieltalsky
2
Froh, dass ich Helfen kann. Das gitBefehlszeilentool ist unglaublich leistungsfähig (tatsächlich werden die meisten Befehle in Bezug auf andere Befehle implementiert), sodass Sie eine Menge Dinge damit tun können, sobald Sie verstanden haben, wie das Repository aufgebaut ist (im Grunde wie der .gitOrdner funktioniert) ).
Sarahhodne
Dies hat bei mir nicht funktioniert - nach dem Ausführen schlagen diese Befehle git show-ref tagsimmer noch fehl.
Felixfbecker
1
Beachten Sie, dass diese Lösung auch funktioniert, wenn ein Zweig mit der folgenden Syntax flach geklont wurde, wobei derselbe Mangel git clone --depth=1 --branch branchname [email protected]:foobar/repo.git destinationpath
auftritt
1
Wow, das ist alles andere als intuitiv! Es ist seltsam, dass Git nicht ohne weiteres einen Befehl hat, um dies zu erreichen. Ja, ich habe es zum Laufen gebracht ... und jetzt weiß ich auch über die Konfigurationsdatei im .git-Verzeichnis Bescheid!
Kashiraja
60

Wenn Sie einen einzelnen Zweig hinzufügen möchten, haben Sie folgende Möglichkeiten:

git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]

Funktioniert mit Git Version 1.9.1

Dominik Pawlak
quelle
1
Ich bin in dich verliebt
user1760150
4
Dies fügt fetch =.git / config mehrere Zeilen hinzu. Dies ist sehr praktisch, wenn Sie zwischen zwei Zweigen auf der Fernbedienung wechseln möchten, aber nicht eine ganze Reihe anderer Zweige abrufen möchten. Vielen Dank!
Terry Brown
4

Um meinem lokalen Repository, das mit geklont wurde --single-branch, einen weiteren Remote-Zweig hinzuzufügen , funktioniert Folgendes für mich:

git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]

Sie können auch Platzhalter verwenden [remote-branch], z

git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5

Dies funktioniert mit Git Version 2.21.1 . Andere Antworten, die git fetch origin [remote-branch]:[local-branch]dies vorschlugen, funktionierten nicht, da der lokale Zweig in einem nicht verfolgten Zustand erstellt wurde. Beim Ausführen wurde git pullzunächst versucht, alle Commits des Remote-Zweigs erneut mit meinem lokalen Zweig zusammenzuführen.

Arno Fiva
quelle
2
Zum zweiten Mal komme ich auf diese Antwort zurück. sehr hilfreich. Vielen Dank!
Godbout
1
Die nützlichste Antwort
Denis Itskovich
1
drittes mal lol.
Godbout
Klingt so, als hätten wir ungefähr den gleichen Veröffentlichungszyklus :)
Arno Fiva
1

Fügen Sie einfach das Original-Repo als neue Fernbedienung hinzu und arbeiten Sie dort ab?

git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin

Sie können sogar Ihre aktuelle 'Origin'-Fernbedienung löschen und' myNewOrigin 'in' Origin 'umbenennen, wenn Sie möchten.

Von dort aus können Sie ziehen / zusammenführen / neu starten.

sjakubowski
quelle
0

Ändern .git/configSie einfach die Datei Ihres lokalen Repos, Zeile fetchvon [remote origin] section.

Vor so etwas

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master

Nachdem es so sein wird

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*
Trueboroda
quelle
0

Ich habe zunächst die Antwort von Dominik Pawlak angewendet und es hat funktioniert. Ich konnte jedoch keine weiteren Änderungen vornehmen, nachdem ich mehr Code in meinen neuen Zweig übernommen hatte.

Es gibt eine andere Möglichkeit zum single-branchvollständigen Zurücksetzen , die hier nicht erwähnt wurde:

git remote remove origin
git remote add origin [email protected]:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
git pull

Dies setzt alles auf das Original zurück.

Houman
quelle
0

Für mich hat gearbeitet:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
Nik Kov
quelle