1267 Stimmen

Wie kann man in Git den lokalen Zweig vollständig durch einen entfernten Zweig ersetzen?

Ich habe zwei Zweige:

  1. die örtliche Zweigstelle (diejenige, mit der ich arbeite)
  2. Remote-Zweig (öffentlich, nur gut getestete Übertragungen gehen dorthin)

Kürzlich habe ich meine örtliche Niederlassung ernsthaft in Schwierigkeiten gebracht.

Wie kann ich den lokalen Zweig vollständig durch den entfernten Zweig ersetzen, so dass ich meine Arbeit dort fortsetzen kann, wo der entfernte Zweig jetzt ist?

Ich habe bereits SO gesucht und das lokale Auschecken in den entfernten Zweig hat keinen Effekt.

1967voto

araqnid Punkte 116680
  1. Vergewissern Sie sich, dass Sie den zu ersetzenden Zweig überprüft haben (von Zoltáns Kommentar ).
  2. Unter der Annahme, dass "master" der lokale Zweig ist, den Sie ersetzen, und dass "origin/master" der entfernte Zweig ist, auf den Sie zurücksetzen wollen:

    git reset --hard origin/master

Dadurch wird Ihr lokaler HEAD-Zweig auf dieselbe Revision wie origin/master aktualisiert, und --hard wird diese Änderung auch mit dem Index und dem Arbeitsbereich synchronisiert.

473voto

TTT Punkte 13477

Ich bin etwas überrascht, dass dies noch niemand erwähnt hat; ich benutze es fast täglich:

git reset --hard @{u}

Im Grunde genommen, @{u} ist nur eine Abkürzung für den Upstream-Zweig, den Ihr aktueller Zweig verfolgt. Zum Beispiel entspricht dies normalerweise origin/[my-current-branch-name] . Das ist gut, denn es ist branchenunabhängig.

Stellen Sie sicher, dass git fetch um die neueste Kopie des entfernten Zweigs zu erhalten.

Nebenbemerkung: In den meisten Shells wird der Befehl wie geschrieben funktionieren, aber wenn Sie Git in PowerShell oder csh verwenden, müssen Sie die Sonderzeichen zuerst entschlüsseln, obwohl ich auch bestätigt habe, dass er in beiden als Zeichenkette funktioniert:

git reset --hard '@{u}'

358voto

adamsmith Punkte 5379

Das ist so einfach wie drei Schritte:

  1. Löschen Sie Ihre lokale Niederlassung: git branch -d local_branch

  2. Holen Sie den neuesten entfernten Zweig: git fetch origin remote_branch

  3. Erstellen Sie den lokalen Zweig auf der Grundlage des entfernten Zweigs neu:

    git checkout -b local_branch origin/remote_branch

50voto

Sailesh Punkte 24557
git branch -D <branch-name>
git fetch <remote> <branch-name>
git checkout -b <branch-name> --track <remote>/<branch-name>

37voto

Modular Punkte 4694

Ersetzen Sie alles durch den entfernten Zweig; けど nur von demselben Commit, auf dem sich Ihre lokale Zweigstelle befindet:

git reset --hard origin/some-branch

OR erhalten die neueste aus dem entfernten Zweig und ersetzen alles:

git fetch origin some-branch
git reset --hard FETCH_HEAD

Nebenbei bemerkt, können Sie bei Bedarf nicht verfolgte Dateien und Verzeichnisse, die Sie noch nicht übertragen haben, löschen:

git clean -fd

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X