Ich möchte mein lokales Repository mit einem Remote-Repository synchronisieren, damit mein lokales Repository zu 100% eine Kopie des Remote-Repositorys wird. Wenn sich bestimmte Dateien in diesen Repositorys unterscheiden, überschreiben wir die lokalen Dateien mit den Remote-Repositorys, sofern vorhanden Dateien in lokalen Repositorys, die nicht auf der Fernbedienung vorhanden sind, werden die lokalen Dateien entfernt.
Gibt es eine andere Möglichkeit, dies zu erreichen, als einen neuen Klon des Remote-Repositorys zu erstellen?
Ähnliche Frage wie Sync local git repo mit remote in einem Schuss, wobei lokale Änderungen / Commits verworfen werden .
git fetch --prune
Antworten:
quelle
git pull -p
macht das gleiche - 'git pull führt git fetch mit den angegebenen Parametern aus und ruft git merge auf, um die abgerufenen Verzweigungsköpfe in der aktuellen Verzweigung zusammenzuführen' - git-scm.com/docs/git-pullgit fetch <remote> --prune
, falls jemand nur eine--prune
bestimmte Fernbedienung benötigt. z.B.git fetch upstream --prune
.git fetch origin --prune
um Ihr lokales Repo mit Ihrer Abzweigung einesupstream
Projekts zu synchronisierenDiese Schritte werden es tun:
dann ohne
-n
Dadurch werden alle lokalen Änderungen berücksichtigt. Jetzt die Commits ...
und beachten Sie die Zeile wie:
Notieren Sie sich jetzt die Nummer 'N':
und schlussendlich:
sollte nichts zum Hinzufügen / Festschreiben anzeigen. Alles sauber.
Ein frischer Klon kann jedoch dasselbe tun (ist jedoch sehr langsam).
=== Aktualisiert ===
Da sich mein Git-Wissen im Laufe der Zeit leicht verbessert hat, habe ich mir einen weiteren einfacheren Weg ausgedacht, um dasselbe zu tun. Hier ist wie (#mit Erklärung). Während Sie in Ihrer Arbeitsbranche sind:
Obwohl Ihre lokalen Commits und Änderungen danach nicht mehr sichtbar sind, können Sie bei Bedarf festgeschriebene Änderungen wiederherstellen.
quelle
Sie müssen verstehen, dass ein Git-Repository nicht nur ein Baum von Verzeichnissen und Dateien ist, sondern auch einen Verlauf dieser Bäume speichert - die möglicherweise Zweige und Zusammenführungen enthalten.
Beim Abrufen aus einem Repository kopieren Sie alle oder einige der Zweige dort in Ihr Repository. Diese befinden sich dann in Ihrem Repository als "Remote-Tracking-Zweige", z. B. Zweige mit dem Namen "
remotes/origin/master
oder".Durch das Abrufen neuer Commits aus dem Remote-Repository wird nichts an Ihrer lokalen Arbeitskopie geändert.
In Ihrer Arbeitskopie wird normalerweise ein Commit ausgecheckt, das aufgerufen wird
HEAD
. Dieses Commit ist normalerweise die Spitze einer Ihrer lokalen Niederlassungen.Ich denke, Sie möchten Ihren lokalen Zweig (oder vielleicht alle lokalen Zweige?) Auf den entsprechenden Remote-Zweig aktualisieren und dann den neuesten Zweig überprüfen.
Um Konflikte mit Ihrer Arbeitskopie (die möglicherweise lokale Änderungen aufweisen) zu vermeiden, bereinigen Sie zunächst alles, was nicht versioniert ist (mit
git clean
). Anschließend checken Sie den lokalen Zweig aus, der dem Remote-Zweig entspricht, auf den Sie aktualisieren möchten, undgit reset
wechseln mit diesem zum abgerufenen Remote-Zweig. (git pull
Integriert alle Aktualisierungen des Remote-Zweigs in Ihren lokalen Zweig, die möglicherweise dasselbe tun, oder erstellt ein Zusammenführungs-Commit, wenn Sie lokale Commits haben.)(Aber dann verlieren Sie wirklich alle lokalen Änderungen - sowohl in der Arbeitskopie als auch in lokalen Commits. Stellen Sie sicher, dass Sie dies wirklich wollen - andernfalls verwenden Sie besser einen neuen Zweig, dies speichert Ihre lokalen Commits. Und verwenden Sie diese Option
git stash
, um Änderungen zu speichern, die noch nicht festgeschrieben sind .)Bearbeiten: Wenn Sie nur einen lokalen Zweig haben und einen Remote-Zweig verfolgen, müssen Sie nur etwas tun
aus dem Arbeitsverzeichnis.
Dadurch wird die aktuelle Version aller nachverfolgten Remote-Zweige abgerufen und der aktuelle Zweig (und das Arbeitsverzeichnis) auf die aktuelle Version des Remote-Zweigs aktualisiert, den er verfolgt.
quelle
git pull
sollte a genug sein, denke ich. (Ich habe die Antwort aktualisiert.)Du willst machen
Dadurch ist Ihr lokales Repo genau wie Ihr Remote-Repo.
Denken Sie daran, Ursprung und Master durch die Fernbedienung und den Zweig zu ersetzen, mit denen Sie synchronisieren möchten.
quelle
node_modules
, es funktioniert genau so, wie ich es will.Setzen Sie das lokale Repository zurück und synchronisieren Sie es mit dem Remote-Zweig
Der Befehl: Denken Sie daran, Ursprung und Master durch die Fernbedienung und den Zweig zu ersetzen, mit denen Sie synchronisieren möchten.
Oder Schritt für Schritt:
Ihre lokale Niederlassung ist jetzt eine exakte Kopie (Commits und alle) der Remote-Niederlassung.
Befehlsausgabe:
Hier ist ein Beispiel für die Ausführung des Befehls auf einem lokalen Klon des Forge a Git-Repositorys.
quelle
(Diese Informationen stammen aus dem Git-Benutzerhandbuch. )
Ich lerne auch, daher ist dies möglicherweise keine genaue Antwort auf die Frage, aber es kann jemandem helfen:
git branch -r
).git fetch
. Dies wirkt sich nicht auf vorhandene, benutzerdefinierte Zweige aus.git add origin /path/to/repository
)git checkout origin/branch_name
, überschrieben. Dadurch werden die Änderungen Ihrer lokalen Zweigstellen überschriebenbranch_name
quelle
Klingt so, als wollten Sie einen Spiegel des Remote-Repositorys:
Dieser Befehl erstellt ein nacktes Repository. Wenn Sie kein nacktes Repository möchten, werden die Dinge komplizierter.
quelle
Wenn Sie über das Synchronisieren eines gegabelten Repos sprechen, können Sie diese Schritte ausführen.
So synchronisieren Sie ein Fork-Repository von git
Überprüfen Sie Ihren aktuellen Git-Zweig
git branch
Kasse zum Master, wenn Sie nicht am Master sind
git checkout master
Rufen Sie das Upstream-Repository ab, wenn Sie über die richtigen Zugriffsrechte verfügen
git fetch upstream
Wenn der folgende Fehler auftritt, führen Sie ihn aus
git remote add upstream [email protected]:upstream_clone_repo_url/xyz.git
Führen Sie nun den folgenden Befehl aus.
git fetch upstream
Wenn Sie nun auf Master sind, führen Sie den Upstream / Master in den Master-Zweig ein
git merge upstream/master
Das ist es!!
Crosscheck per
git remote
Befehl, genauergit remote -v
Wenn ich auch Commit-Rechte für das Upstream-Repo habe, kann ich eine lokale Upstream-Niederlassung erstellen und Arbeiten ausführen, die dort Upstream werden.
quelle
Sie können dafür Git-Hooks verwenden . Erstellen Sie einfach einen Hook, der nach einem Update Änderungen am anderen Repo vornimmt.
Natürlich kann es zu Zusammenführungskonflikten kommen, sodass Sie herausfinden müssen, wie Sie damit umgehen sollen.
quelle