Wie erzwinge ich “git pull”, um lokale Dateien zu überschreiben?

Lesezeit: 8 Minuten

Wie erzwinge ich git pull um lokale Dateien zu uberschreiben
Jakob Troszok

Wie erzwinge ich ein Überschreiben lokaler Dateien auf a git pull?

Das Szenario ist folgendes:

  • Ein Teammitglied ändert die Vorlagen für eine Website, an der wir arbeiten
  • Sie fügen einige Bilder zum Bilderverzeichnis hinzu (vergisst aber, sie unter Quellcodeverwaltung hinzuzufügen).
  • Sie schicken mir die Bilder später per Post
  • Ich füge die Bilder unter der Quellcodeverwaltung hinzu und schiebe sie zusammen mit anderen Änderungen auf GitHub
  • Sie können keine Updates von GitHub abrufen, da Git ihre Dateien nicht überschreiben möchte.

Dies ist der Fehler, den ich bekomme:

Fehler: Nicht nachverfolgte Arbeitsbaumdatei ‘public/images/icon.gif’ würde beim Zusammenführen überschrieben

Wie zwinge ich Git, sie zu überschreiben? Die Person ist ein Designer – normalerweise löse ich alle Konflikte von Hand, damit der Server die neueste Version hat, die sie nur auf ihrem Computer aktualisieren müssen.

  • Jeder, der dies liest und glaubt, er könnte Dateien verlieren, ich war in dieser Position und habe festgestellt, dass der Puffer von Sublime Text mich gerettet hat – wenn ich an etwas arbeite, dann lösche versehentlich alles, indem ich versuche, ein ähnliches Problem wie dieses zu lösen, oder indem ich es verwende Wenn Sie eine Antwort auf diese Frage haben und die Dateien in Sublime geöffnet haben (was sehr wahrscheinlich ist), sind die Dateien immer noch in Sublime vorhanden, entweder nur dort oder im Undo-Verlauf

    – Toni Leigh

    20. Januar 2016 um 8:51 Uhr


  • git reset --hard origin/branch_to_overwrite

    – Andrew Atkinson

    22. März 2016 um 8:37 Uhr

  • Führen Sie im Grunde nur nach dem anfänglichen Checkout -b einen Pull aus der Entwicklung durch. Erledige deine Arbeit und drücke dich dann wieder hinein.

    – ldgorman

    22. August 2018 um 9:09 Uhr


  • Kurze Antwort: Zweig löschen und neu erstellen. 1. Zweig löschen: git branch <branch> -D 2. Auf einen Commit vor dem Konflikt zurücksetzen: git reset <commit> --hard 3. Erstellen Sie den Zweig neu: git branch <branch> 4. Stellen Sie das Tracking auf dem Server ein: git --set-upstream-to=origin/<branch> <branch> 5. Pull: git pull’

    – Nino Filius

    24. September 2018 um 8:54 Uhr

  • Um alle CRLF-Endungen in LF-Endungen zu ändern (start clean) git config core.autocrlf false; git ls-files -z | xargs -0 rm; git checkout .

    – Chloe

    17. Januar 2019 um 2:46 Uhr


Wie erzwinge ich git pull um lokale Dateien zu uberschreiben
Travis Reeder

Versuche dies:

git reset --hard HEAD
git pull

Es sollte tun, was Sie wollen.

  • Ich habe dies getan und einige lokale Dateien, die sich nicht mehr im Repo befanden, blieben auf der Festplatte.

    – Piotr Owsiak

    8. April 2011 um 16:00 Uhr

  • Ich glaube nicht, dass das richtig ist. Das obige führt eine Zusammenführung durch und überschreibt nicht, was in der Frage angefordert wurde: “How to force git to overwrite them?” Ich habe die Antwort nicht, ich suche gerade danach “git checkout -b BranchToOverwrite”. Sie haben jetzt den genauen Code von BranchWithCodeToKeep auf dem Zweig BranchToOverwrite, ohne eine Zusammenführung durchführen zu müssen.

    – Felbus

    13. Juli 2011 um 10:11 Uhr


  • anstatt mit ‘git pull’ zusammenzuführen, versuchen Sie git fetch –all gefolgt von ‘git reset –hard origin/master’

    – Lloyd Moore

    21. Februar 2012 um 14:56 Uhr

  • Ja, die @lloydmoore-Lösung hat bei mir funktioniert. Könnte eher eine Antwort als nur ein Kommentar sein.

    – Max Williams

    19. November 2012 um 9:54 Uhr

  • Dadurch werden die aktuellen Änderungen auf den zuletzt abgerufenen Branch-Commit zurückgesetzt. Dann führt git pull die Änderungen aus dem letzten Zweig zusammen. Das hat genau das getan, was ich wollte. Danke!

    – Codeversiert

    5. Dezember 2014 um 17:42 Uhr

  • Sie können git clean ein Pfadargument geben, um genauer zu sein und das Löschen von nicht nachverfolgten Dateien zu vermeiden, die nicht in Konflikt stehen.

    – Joachim

    18. Oktober 2011 um 10:08 Uhr

  • Ich denke, die Szenariobeschreibung macht deutlich, dass er den Inhalt nicht wirklich wegwerfen will. Vielmehr will er den Idioten davon abhalten, die Dateien zu überschreiben. @Lauri, das hätte dir nicht passieren dürfen. Leider scheinen die Leute die Essenz der Szenariobeschreibung falsch verstanden zu haben – siehe meinen Vorschlag.

    – Igel

    11. Februar 2012 um 23:05 Uhr

  • ENDLICH. git clean -f -d ist praktisch, wenn make clean nicht alles säubern kann.

    – Erdmelone

    23. Juni 2012 um 4:32 Uhr

  • @crizCraig, es sei denn, sie werden hinzugefügt .gitignore

    – Blutende Finger

    13. Juni 2013 um 6:58 Uhr

  • @earthmeLon, dafür möchtest du vielleicht git clean -dfx. Die -x ignoriert .gitignore. Normalerweise befinden sich Ihre Build-Produkte in .gitignore.

    – Paul Tucher

    12. August 2015 um 18:28 Uhr

1646896691 599 Wie erzwinge ich git pull um lokale Dateien zu uberschreiben
Richard Kersey

Wie Hedgehog finde ich die Antworten schrecklich. Aber obwohl die Antwort von Hedgehog besser sein könnte, denke ich nicht, dass sie so elegant ist, wie sie sein könnte. Der Weg, den ich gefunden habe, um dies zu tun, ist die Verwendung von fetch und merge mit definierter Strategie. Dadurch sollten Ihre lokalen Änderungen erhalten bleiben, solange sie nicht zu den Dateien gehören, mit denen Sie ein Überschreiben erzwingen möchten.

Führen Sie zuerst ein Commit Ihrer Änderungen durch

 git add *
 git commit -a -m "local file server commit message"

Holen Sie dann die Änderungen und überschreiben Sie sie, wenn es einen Konflikt gibt

 git fetch origin master
 git merge -s recursive -X theirs origin/master

-X ein Optionsname ist und theirs ist der Wert für diese Option. Sie entscheiden sich für die Verwendung their Änderungen (die andere Option ist ours Änderungen), wenn es einen Konflikt gibt.

  • Dies ist die beste Antwort, die ich bisher gesehen habe. Ich habe es nicht versucht, aber im Gegensatz zu anderen Antworten versucht dies nicht, alle Ihre nicht verfolgten Dateien zu zerstören, was aus offensichtlichen Gründen sehr gefährlich ist.

    – huyz

    7. Mai 2012 um 9:36 Uhr

  • Dito – das hat bei mir funktioniert, als ich eine sehr große Zusammenführung (GitHub-Pull-Anforderung) durchgeführt habe, bei der ich einfach alles zusätzlich zu dem, was ich hatte, akzeptieren wollte. Gute Antwort! In meinem Fall waren die letzten beiden Befehle: 1) get fetch other-repo; 2) git merge -s recursive -X theirs other-repo/master

    – quux00

    27. Juli 2012 um 1:44 Uhr


  • Dadurch werden alle Konflikte mit den Repositories-Dateien überschrieben und nicht mit Ihren lokalen, richtig?

    – Nathan F.

    5. Dezember 2014 um 11:40 Uhr

  • Beste Antwort. Die höchst akzeptierte Antwort ließ mich in meinem Fall auf distanziertem Kopf zurück. Ich wechselte zurück zum lokalen Master-Zweig und lief git merge -X theirs origin/master

    – Petergus

    11. März 2016 um 12:46 Uhr

  • Ich wollte nur, dass der verdammte Idiot alles überschreibt und die Klappe hält. Schließlich verwende ich es nur zwischen meinem Arbeits-PC und einigen Himbeer-Pi-Systemen. Wunsch nach einer Option zum erzwungenen Überschreiben, zumindest für den Projektleiter

    – Uhrwerk

    5. Juni 2019 um 14:39 Uhr

Anstatt zu tun:

git fetch --all
git reset --hard origin/master

Ich würde raten, Folgendes zu tun:

git fetch origin master
git reset --hard origin/master

Sie müssen nicht alle Remotes und Zweige abrufen, wenn Sie auf den Ursprungs-/Master-Zweig zurücksetzen, richtig?

  • Dies ist die beste Antwort, die ich bisher gesehen habe. Ich habe es nicht versucht, aber im Gegensatz zu anderen Antworten versucht dies nicht, alle Ihre nicht verfolgten Dateien zu zerstören, was aus offensichtlichen Gründen sehr gefährlich ist.

    – huyz

    7. Mai 2012 um 9:36 Uhr

  • Dito – das hat bei mir funktioniert, als ich eine sehr große Zusammenführung (GitHub-Pull-Anforderung) durchgeführt habe, bei der ich einfach alles zusätzlich zu dem, was ich hatte, akzeptieren wollte. Gute Antwort! In meinem Fall waren die letzten beiden Befehle: 1) get fetch other-repo; 2) git merge -s recursive -X theirs other-repo/master

    – quux00

    27. Juli 2012 um 1:44 Uhr


  • Dadurch werden alle Konflikte mit den Repositories-Dateien überschrieben und nicht mit Ihren lokalen, richtig?

    – Nathan F.

    5. Dezember 2014 um 11:40 Uhr

  • Beste Antwort. Die höchst akzeptierte Antwort ließ mich in meinem Fall auf distanziertem Kopf zurück. Ich wechselte zurück zum lokalen Master-Zweig und lief git merge -X theirs origin/master

    – Petergus

    11. März 2016 um 12:46 Uhr

  • Ich wollte nur, dass der verdammte Idiot alles überschreibt und die Klappe hält. Schließlich verwende ich es nur zwischen meinem Arbeits-PC und einigen Himbeer-Pi-Systemen. Wunsch nach einer Option zum erzwungenen Überschreiben, zumindest für den Projektleiter

    – Uhrwerk

    5. Juni 2019 um 14:39 Uhr

Wie erzwinge ich git pull um lokale Dateien zu uberschreiben
Peter Mortensen

Es sieht so aus, als wäre es am besten, zuerst Folgendes zu tun:

git clean

Löschen Sie alle nicht verfolgten Dateien und fahren Sie dann mit dem Üblichen fort git pull

  • Ich habe versucht, “git clean” zu verwenden, um das gleiche Problem zu lösen, aber es hat es nicht gelöst. git status sagt “Ihr Zweig und ‘Ursprung/Master’ sind auseinandergegangen, # und haben jeweils 2 und 9 verschiedene Commits.” und git pull sagt etwas ähnliches wie oben.

    – schlau

    24. September 2009 um 4:25 Uhr

  • git clean ist ein ziemlich stumpfes Instrument und könnte viele Dinge wegwerfen, die Sie vielleicht behalten möchten. Es ist besser, die Dateien zu entfernen oder umzubenennen, über die sich Git beschwert, bis der Pull erfolgreich ist.

    – Neil Mayhew

    2. Juli 2010 um 13:21 Uhr

  • Ich glaube nicht, dass das generell funktioniert. Gibt es keine Möglichkeit, im Grunde einen Git-Clone-Remote über einen erzwungenen Git-Pull durchzuführen?

    – Mathehaken

    29. November 2010 um 18:30 Uhr

  • @Mathick: git fetch origin && git reset --hard origin/master

    – Pfeilmeister

    23. Februar 2011 um 4:24 Uhr

  • Ist git clean die beste Antwort hier? Scheint, als ob das Entfernen von Dateien nicht unbedingt das ist, was das OP will. Sie baten um „ein Überschreiben lokaler Dateien“, nicht um eine Löschung.

    – JohnAllen

    4. März 2014 um 8:28 Uhr

986830cookie-checkWie erzwinge ich “git pull”, um lokale Dateien zu überschreiben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy