436 Stimmen

Synchronisierung eines lokalen Git-Repositorys mit einem entfernten Repository

Ich möchte mein lokales Repository mit einem entfernten Repository synchronisieren, so dass mein lokales Repository eine 100%ige Kopie des entfernten Repositorys wird - das heißt, wenn sich bestimmte Dateien in diesen Repositories unterscheiden, überschreiben wir die lokalen mit den entfernten, und wenn es Dateien in den lokalen Repositories gibt, die im entfernten nicht existieren, werden die lokalen Dateien entfernt.

Gibt es eine andere Möglichkeit, dies zu erreichen, als einen neuen Klon des entfernten Repositorys zu erstellen?

Ähnliche Frage wie Synchronisierung des lokalen Git-Repos mit dem entfernten Repository auf einen Schlag unter Vernachlässigung lokaler Änderungen/Beiträge .

554voto

jobwat Punkte 7399
git fetch --prune

-p, --prune
Entfernen Sie nach dem Holen alle Remote-Tracking-Zweige, die nicht mehr auf der Remote existieren. Pflaumenoptionen

198voto

FractalSpace Punkte 5133

Mit diesen Schritten ist es getan:

git reset --hard HEAD
git clean -f -x -d -n

dann ohne -n

Damit sind alle lokalen Änderungen erledigt. Jetzt die Commits...

git status

und notieren Sie die Zeile wie:

Your branch is ahead of 'xxxx' by N commits.

Notieren Sie sich die Zahl 'N'. jetzt:

git reset --hard HEAD~N
git pull

und schließlich:

git status

sollte nichts zum Hinzufügen/Bestätigen anzeigen. Alles sauber.

Ein frischer Klon kann jedoch das Gleiche tun (ist aber viel langsamer).

\===Aktualisiert===

Da sich meine Git-Kenntnisse im Laufe der Zeit etwas verbessert haben, habe ich eine weitere, einfachere Möglichkeit gefunden, das Gleiche zu tun. Hier ist wie (#mit Erklärung). Während Sie sich in Ihrem Arbeitszweig befinden:

git fetch # This updates 'remote' portion of local repo. 
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.

Obwohl Ihre lokalen Übertragungen und Änderungen danach aus dem Blickfeld verschwinden, ist es möglich, übertragene Änderungen wiederherzustellen, falls erforderlich.

175voto

aandis Punkte 3634

Sie möchten Folgendes tun

git fetch --prune origin
git reset --hard origin/master
git clean -f -d

Dadurch wird Ihr lokales Repository genau wie Ihr entferntes Repository.

Denken Sie daran, origin und master durch den Remote und den Zweig zu ersetzen, mit dem Sie synchronisieren möchten.

100voto

Paŭlo Ebermann Punkte 70779

Sie müssen verstehen, dass ein Git-Repository nicht nur ein Baum von Verzeichnissen und Dateien ist, sondern auch eine Historie dieser Bäume speichert, die Verzweigungen und Zusammenführungen enthalten kann.

Wenn Sie aus einem Repository holen, kopieren Sie alle oder einige der dortigen Zweige in Ihr Repository. Diese befinden sich dann in Ihrem Repository als "entfernte Verfolgungszweige", z.B. Zweige mit Namen wie remotes/origin/master oder dergleichen.

Das Abrufen neuer Commits aus dem entfernten Repository wird nichts an Ihrer lokalen Arbeitskopie ändern.

Ihre Arbeitskopie hat normalerweise einen Commit ausgecheckt, genannt HEAD . Dieses Commit ist in der Regel die Spitze einer Ihrer lokalen Niederlassungen.

Ich denke, Sie wollen Ihren lokalen Zweig (oder vielleicht alle lokalen Zweige?) auf den entsprechenden entfernten Zweig aktualisieren und dann den neuesten Zweig auschecken.

Um Konflikte mit Ihrer Arbeitskopie (die möglicherweise lokale Änderungen enthält) zu vermeiden, bereinigen Sie zunächst alles, was nicht versioniert ist (mit git clean ). Dann checken Sie den lokalen Zweig aus, der dem entfernten Zweig entspricht, auf den Sie aktualisieren wollen, und verwenden git reset um es auf den abgerufenen entfernten Zweig umzustellen. ( git pull übernimmt alle Aktualisierungen des entfernten Zweigs in Ihren lokalen Zweig, der dasselbe tun kann, oder erstellt einen Merge-Commit, wenn Sie lokale Commits haben).

(Aber dann gehen wirklich alle lokalen Änderungen verloren - sowohl in der Arbeitskopie als auch in den lokalen Commits. Vergewissern Sie sich, dass Sie das wirklich wollen - andernfalls verwenden Sie besser einen neuen Zweig, das spart Ihre lokalen Übertragungen. Und verwenden Sie git stash um Änderungen zu speichern, die noch nicht festgeschrieben sind).


Edita: Wenn Sie nur eine lokale Zweigstelle haben und eine entfernte Zweigstelle verfolgen, müssen Sie nur Folgendes tun

git pull

innerhalb des Arbeitsverzeichnisses.

Dadurch wird die aktuelle Version aller verfolgten entfernten Zweige abgerufen und der aktuelle Zweig (und das Arbeitsverzeichnis) auf die aktuelle Version des verfolgten entfernten Zweigs aktualisiert.

21voto

Mahendra Pratap Punkte 2647

Lokales Repository zurücksetzen und mit entferntem Zweig synchronisieren

Der Befehl: Denken Sie daran, origin und master durch den entfernten Standort und den Zweig zu ersetzen, mit dem Sie synchronisieren möchten.

git fetch origin && git reset --hard origin/master && git clean -f -d

Oder Schritt für Schritt:

git fetch origin
git reset --hard origin/master
git clean -f -d

Ihr lokaler Zweig ist nun eine exakte Kopie (Commits und alle) des entfernten Zweigs.

Befehlsausgabe:

Hier ist ein Beispiel für die Ausführung des Befehls auf einem lokalen Klon des Forge a git-Repository.

sharkbook:forge lbaxter$ git fetch origin && git reset --hard origin/master && git clean -f -d
HEAD is now at 356cd85 FORGE-680
Removing forge-example-plugin/
Removing plugin-container-api/
Removing plugin-container/
Removing shell/.forge_settings
sharkbook:forge lbaxter$

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