Ich mache Git-Pull einer Open-Source-Bibliothek, es ist mir egal, was meine lokale Kopie ist, ich möchte sie nur mit der Ursprungsversion aktualisieren.
dh es kann meine lokalen Änderungen wegblasen.
Ich mache Git-Pull einer Open-Source-Bibliothek, es ist mir egal, was meine lokale Kopie ist, ich möchte sie nur mit der Ursprungsversion aktualisieren.
dh es kann meine lokalen Änderungen wegblasen.
Das sollte den Trick machen:
git reset --hard HEAD
git pull
Und wenn Sie lokale Commits erstellt haben, die Sie wegwerfen möchten, verwenden Sie: git reset --hard origin/master
stattdessen.
– Greg Hewgill
29. Dezember 2010 um 2:07 Uhr
Und wenn Sie keine benutzerdefinierten lokalen Änderungen haben, sollten Sie dies tun git pull --rebase
– Henrik
9. August 2011 um 7:40 Uhr
funktioniert nicht, wenn ich KONFLIKTE und Fehlermeldungen zum automatischen Zusammenführen bekomme. Mir egal, ich will nur alles komplett überschreiben…
– Nathan Schwermann
25. Oktober 2011 um 17:48 Uhr
@schwiz Sie können den Zweig löschen oder umbenennen und neu erstellen, um ihn vom Ursprung zu verfolgen: stackoverflow.com/questions/2665045/…
– Ian Jäger
19. Dezember 2011 um 21:25 Uhr
Diese Antwort geht davon aus, dass Sie noch nie Commits für Ihren Zweig vorgenommen haben, ziemlich weit entfernt von dem, was die Frage sagte (“I don’t care what my local copy is”).
– jwg
16. Januar 2013 um 13:40 Uhr
jwg
git fetch
git checkout origin/name_of_branch # correct state but in 'head without a name'
git checkout -B name_of_branch # overwrite current tree onto name_of_branch
Dies checkt den Remote-Tracking-Zweig in einen Kopf ohne Namen aus, dann können Sie einen Blick darauf werfen und überprüfen, ob Sie zufrieden sind. Wann immer Sie möchten (auch nach Änderungen oder Commits), beschriftet der zweite Git-Checkout Ihren aktuellen Baum mit „Name_des_Zweigs“, selbst wenn er dazu den alten Name_des_Zweigs löschen muss.
Die Syntax von Git-Befehlen scheint nicht intuitiv zu sein. Tatsächlich ist es das Git-Datenmodell, das nicht intuitiv ist. Das ist kein schlechtes Design, aber weil es mit Dateien, Zweigen und Commits auf eine Weise arbeitet, die viel flexibler und leistungsfähiger ist als andere Versionskontrollsysteme. Sobald Sie wissen, wie diese Dinge in Git funktionieren, wird die Befehlszeile viel Sinn machen und Sie werden in der Lage sein, genau zu erraten, wie komplizierte Dinge zu tun sind.
git fetch
Das holt alle Updates, die auf dem passiert sind origin
Server seit dem letzten Mal. Git trennt das Abrufen vom Server vom Aktualisieren, Zusammenführen usw. Ihrer Branches. Alle Filialen haben angerufen origin/XXX
sind dein die neuesten Versionen dessen, was auf dem Server ist. Sie sind nicht entfernte Filialen sondern Remote-Tracking-Zweige, lokale Verzweigungen, die entfernte Verzweigungen verfolgen. Wenn Sie das tun git fetch
, aktualisieren Sie sie, ohne Ihre eigenen Zweige zu berühren. Wenn Sie das tun git merge
, git rebase
und so weiter, verwenden Sie die abgerufene Version, ohne Holen Sie sich eine neuere Kopie vom Server. Dies bedeutet, dass Sie die Kontrolle darüber haben, wann Netzwerkanfragen gestellt werden (wenn Sie nicht immer mit dem Server verbunden sind), und Sie können einen Snapshot des Servers „holen“ und dann nach Belieben zusammenführen. Im Zweifel tun git fetch
Erste.
git checkout origin/name_of_branch
git checkout
macht zwei Dinge. Es aktualisiert Ihre Dateien auf diesen Zweig und legt Ihre fest HEAD
zu dieser Filiale. Die Dateien sind das, was Sie erwarten würden. Das HEAD
Dinge bedeutet, dass, wenn Sie Commits machen, sie am Ende des Zweigs that hinzugefügt werden HEAD
verweist auf. IOW, checkout
tut beides Ausgang – die richtigen Versionen der Dateien schreiben und vorbereiten Eingang – bereitet sich darauf vor, die Commits, die Sie durchführen werden, an der richtigen Stelle zu speichern. Wenn Sie zur Kasse gehen, rufen Sie eine Filiale an foo
ändert sich Ihr Baum in den Zustand, in dem er gespeichert wurde foo
, und Die nächsten Commits, die Sie ausführen, werden hinzugefügt foo
. Im Falle von origin\xyz
können Sie Ihre Änderungen nicht in eine schreiben origin
Zweig – diese verfolgen, was auf dem ist origin
server und kann nicht direkt festgeschrieben werden. Die Kasse aktualisiert also die Dateien und setzt HEAD
zu nichts – ein unbenannter Zweig. Dies hält Sie davon ab, Ihre neu ausgecheckten Daten versehentlich wieder in den vorherigen Branch zu übertragen, den Sie verwendet haben, und tatsächlich werden Sie von git stark davon abgehalten, überhaupt zu committen, bis Sie einen Ziel-Zweig haben.git checkout -B name_of_branch
Wie gewöhnlich, Wenn git zwei verschiedene Dinge mit einem Befehl macht, können beide separat konfiguriert werden. Also der zweite Teil von was checkout
tut, Einstellung HEAD
zu dem Zweig, zu dem Sie sich verpflichten möchten, kann ein neuer Zweig sein, anstatt zu dem Zweig, den Sie auschecken, wenn Sie den verwenden -B
Möglichkeit. So git checkout -B new_stuff old_stuff
setzt alle Ihre Dateien in den Status in old_stuff
aber bereiten Sie sich darauf vor, Ihre Commits in den neuen Zweig zu schreiben new_stuff
. Dies ist eine häufige Aufgabe und erspart Ihnen das Auschecken eines Zweigs und das anschließende Forken in zwei Schritten. Jetzt, Fast alle Argumente für git-Befehle können weggelassen werden, und git wird das Naheliegendste tun. In diesem Fall macht das einen neuen Zweig basierend auf dem, auf dem Sie sich befinden, anstatt eines, das Sie auschecken möchten. Git nimmt also den unbenannten Zweig, auf dem Sie sich befinden, und erstellt einen neuen Zweig mit dem Namen name_of_branch
, für die Sie sich verpflichten können. Beachten Sie, dass ein Großbuchstabe „B“ so etwas wie „Kraft“ bedeutet. Wenn Sie “-b” verwenden, würde Git sich weigern, einen bereits vorhandenen Zweig zu überschreiben. Mit “-B” wird es ohne Warnung oder Bestätigung fortgesetzt.
@cept0 Wenn Sie nur mehrere hundert Wörter mit vielen Aufzählungszeichen und fettgedruckten Erklärungen lesen, könnten auch Sie lernen, die git-Befehlssyntax zu lieben!
– jwg
19. Mai 2014 um 9:44 Uhr
Antak
Das Ziel, ruckzuckLösung ist: git reset --hard origin/master
†
† oder origin/main
oder wie auch immer der Name der Filiale Ihres Ursprungs lautet.
Es ist die allmächtige Lösung für Experten und Anfänger gleichermaßen, die die Arbeit schnell erledigt. Obwohl alle nicht festgeschriebenen Änderungen ohne Vorwarnung weggeblasen werden.
Das sicherer Der Befehl ist etwas mühsamer zu tippen: git checkout -B master origin/master
git config --global alias.become '!git checkout -B "$(git symbolic-ref --short HEAD)"'
Fortan kann man eingeben: git become origin/master
origin/master
gibt Fehlermeldung. origin/main
funktioniert. Außerdem haben die Ordner und Dateien das aktuelle Datum/die aktuelle Uhrzeit, nicht das Datum/die Uhrzeit im Repo.
– WinEunuuchs2Unix
4. Dezember 2021 um 22:50 Uhr
Aktualisiert, um den Zweignamen zu verdeutlichen. Die Sache mit Datum/Uhrzeit klingt nach einer schlechten Erwartung, da Git keine Zeitstempel von Dateien oder Ordnern aufzeichnet.
– Antak
6. Dezember 2021 um 3:42 Uhr
Ich bitte um abweichende Zeitstempel. Git sagt Ihnen, vor wie vielen Minuten, Stunden, Tagen, Monaten oder Jahren eine Datei zuletzt geändert wurde. Das ist nur mit einem Zeitstempel auf jeder Datei möglich.
– WinEunuuchs2Unix
6. Dezember 2021 um 11:52 Uhr
@WinEunuuchs2Unix Diese Informationen in Visualisierungen wie in GitHub basieren auf dem Zeitstempel des Commit. Es ist nicht der Zeitstempel der Datei. Git kümmert sich nicht um Dateisystem-Zeitstempel und weder Aufzeichnungen noch Versuche zur Wiederherstellung dieser Zeitstempel beim Auschecken von Dateien.
– Antak
7. Dezember 2021 um 9:18 Uhr