@Cascabel Dies bedeutet, alle lokalen Änderungen rückgängig zu machen, alle lokalen Commits aufzuheben, alle lokalen neuen Dateien und Verzeichnisse zu löschen, alle lokal gelöschten Dateien und Verzeichnisse wiederherzustellen usw. Kurz gesagt, führen Sie einfach einen Befehl so aus, als ob rm -rf local_repo && git clone remote_url.
Victor
Antworten:
820
Wenn Sie meinen, dass der Pull lokale Änderungen überschreiben soll, führen Sie die Zusammenführung so aus, als wäre der Arbeitsbaum sauber. Reinigen Sie den Arbeitsbaum:
git reset --hard
git pull
Wenn nicht verfolgte lokale Dateien vorhanden sind, können Sie diese git cleanentfernen. Verwenden Sie git clean -fdiese Option, um nicht verfolgte Dateien -dfzu entfernen, nicht verfolgte Dateien und Verzeichnisse -xdfzu entfernen und nicht verfolgte oder ignorierte Dateien oder Verzeichnisse zu entfernen.
Wenn Sie andererseits die lokalen Änderungen irgendwie beibehalten möchten, verwenden Sie Stash, um sie vor dem Ziehen zu verbergen, und wenden Sie sie anschließend erneut an:
git stash
git pull
git stash pop
Ich halte es jedoch nicht für sinnvoll , die Änderungen buchstäblich zu ignorieren - die Hälfte des Pulls ist das Zusammenführen, und die festgeschriebenen Versionen des Inhalts müssen mit den abgerufenen Versionen zusammengeführt werden.
Git ist das Seltsamste überhaupt. Git Reset - hart gemacht. Dann Git-Status: Ihre Filiale hat 2 Commits Vorsprung.
Shailen
21
@shailenTJ "Lokale Änderungen" bedeutet hier nicht festgeschriebene Änderungen, keine lokalen Festschreibungen. git reset --hardbetrifft das erstere, nicht das letztere. Wenn Sie den Status der Fernbedienung vollständig zurücksetzen möchten, git reset --hard origin/<branch>aber häufig und in diesem Fall sind diese beiden Commits, durch die Sie dem Ursprung voraus sind, Arbeit, die Sie erledigt haben, und nicht etwas, das Sie wegwerfen möchten.
Cascabel
2
Das ist also dasselbe wie das lokale Repository zu zerstören und erneut herunterzuladen, oder? Ich möchte nur in der Lage sein, das Ziehen zu erzwingen und Änderungen der Einfachheit halber zu überschreiben. In 99% der Fälle erhalte ich diese Fehlermeldung, wenn ich versehentlich etwas lokal durcheinander gebracht habe und nur vom Repo aus neu beginnen möchte.
Sudo
Was ist, wenn Sie unmöglich keine lokale Veränderung gegen Kopf haben können? Beispiel: Das Repo wurde in einem Dateisystem erstellt, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, und wird in einem Dateisystem ohne Berücksichtigung von Groß- und Kleinschreibung geklont. Es gibt zwei Dateien mit demselben Namen und unterschiedlichem Gehäuse.
Hat super für mich funktioniert, als ich viele Probleme mit der Top-Antwort hatte. Vielen Dank!
0x0
6
Dies funktioniert sogar, wenn Sie
Ihre
16
Dies sollte die beste Antwort sein :)
Purus
5
@Marco Servetto: Sie holen zuerst alle Ihre Git-Änderungen ab, wenden sie aber noch nicht an. Anschließend setzen Sie den Master auf den letzten Status zurück (aktualisiert). Wenn Sie den ersten Schritt überspringen, werden die Änderungen am alten Master (lokal) zurückgesetzt. Nach meiner Erfahrung verursacht die Art und Weise, wie ich es beschrieben habe, niemals Probleme. Alle anderen Versuche am Ende.
Artur Barseghyan
1
Dies funktionierte für mich, ich wollte alle meine lokalen Änderungen ignorieren, einschließlich der Wiederherstellung gelöschter Dateien
Neri
28
Sie wollen nur einen Befehl, der genau das gleiche Ergebnis liefert wie rm -rf local_repo && git clone remote_url, oder? Ich möchte auch diese Funktion. Ich frage mich, warum git keinen solchen Befehl (wie git recloneoder git sync) bereitstellt und svn auch keinen solchen Befehl (wie svn recheckoutoder svn sync) bereitstellt .
Das funktioniert wirklich, auch wenn Sie bereits lokale Commits haben, die Sie entfernen möchten.
Yuri Ghensev
5
Warnung Jungs !! git clean -fxdentfernt auch Dateien von .gitignore.
Ramesh Navi
@RameshNavi Sicher. Genau das ist erwünscht. Was gewünscht wird, ist eine schnellere Möglichkeit, es erneut zu klonen, dh das gesamte lokale Repo zu löschen und es dann zu klonen.
Victor
27
Der Befehl unten wird nicht immer funktionieren . Wenn Sie nur:
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla
$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
und so weiter...
Um wirklich von vorne zu beginnen, die Branche herunterzuladen und alle Ihre lokalen Änderungen zu überschreiben, gehen Sie einfach wie folgt vor:
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...
$ git status
# On branch thebranch
nothing to commit (working directory clean)
$ git checkout thebranch
Already on 'thebranch'
Schauen Sie sich git stash an, um alle Ihre lokalen Änderungen in eine "Stash-Datei" zu kopieren und zum letzten Commit zurückzukehren. An diesem Punkt können Sie Ihre versteckten Änderungen anwenden oder verwerfen.
git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
Die for-Schleife löscht alle verfolgten Dateien, die im lokalen Repo geändert wurden, git pullund funktioniert daher problemlos.
Das Schönste daran ist, dass nur die verfolgten Dateien von den Dateien im Repo überschrieben werden, alle anderen Dateien bleiben unberührt.
Das ist der Antwort von Artur Barseghyan aus dem Jahr 2015 sehr ähnlich ... aber ich würde immer noch gerne wissen, was der Zweck des 3. Befehls ist: Die Arbeitsdateien haben sich nach dem 2. Befehl geändert, und der 3. Befehl lautet "Bereits aktuell "
Mike Nagetier
Das ist die einzige Kombination, die in meiner Umgebung funktioniert hat. Vielleicht sehen Sie etwas anderes. Für mich brauchte ich die drei Befehle
Pablo Pazos
Interessant. Könnte eine Versionssache sein. Ich bin auf Git 2.7.4. Aber ich habe auch gerade einen neuen Kommentar von Artur Barseghyan gesehen: "Andernfalls könnten Sie an einem versehentlich veralteten Meister arbeiten."
Mike Nagetier
Vielleicht, aber das einzige, was ich sagen kann, ist "das hat bei mir funktioniert, als es keine andere Lösung gab", also könnte es anderen helfen
rm -rf local_repo && git clone remote_url
.Antworten:
Wenn Sie meinen, dass der Pull lokale Änderungen überschreiben soll, führen Sie die Zusammenführung so aus, als wäre der Arbeitsbaum sauber. Reinigen Sie den Arbeitsbaum:
Wenn nicht verfolgte lokale Dateien vorhanden sind, können Sie diese
git clean
entfernen. Verwenden Siegit clean -f
diese Option, um nicht verfolgte Dateien-df
zu entfernen, nicht verfolgte Dateien und Verzeichnisse-xdf
zu entfernen und nicht verfolgte oder ignorierte Dateien oder Verzeichnisse zu entfernen.Wenn Sie andererseits die lokalen Änderungen irgendwie beibehalten möchten, verwenden Sie Stash, um sie vor dem Ziehen zu verbergen, und wenden Sie sie anschließend erneut an:
Ich halte es jedoch nicht für sinnvoll , die Änderungen buchstäblich zu ignorieren - die Hälfte des Pulls ist das Zusammenführen, und die festgeschriebenen Versionen des Inhalts müssen mit den abgerufenen Versionen zusammengeführt werden.
quelle
git reset
Ihre Dateien immer noch von der Fernbedienung unterscheiden, lesen Sie stackoverflow.com/questions/1257592/…git reset --hard
betrifft das erstere, nicht das letztere. Wenn Sie den Status der Fernbedienung vollständig zurücksetzen möchten,git reset --hard origin/<branch>
aber häufig und in diesem Fall sind diese beiden Commits, durch die Sie dem Ursprung voraus sind, Arbeit, die Sie erledigt haben, und nicht etwas, das Sie wegwerfen möchten.Für mich hat folgendes funktioniert:
(1) Holen Sie zuerst alle Änderungen ab:
(2) Setzen Sie dann den Master zurück:
(3) Ziehen / Aktualisieren:
quelle
Sie wollen nur einen Befehl, der genau das gleiche Ergebnis liefert wie
rm -rf local_repo && git clone remote_url
, oder? Ich möchte auch diese Funktion. Ich frage mich, warum git keinen solchen Befehl (wiegit reclone
odergit sync
) bereitstellt und svn auch keinen solchen Befehl (wiesvn recheckout
odersvn sync
) bereitstellt .Versuchen Sie den folgenden Befehl:
quelle
git clean -fxd
entfernt auch Dateien von.gitignore
.Der Befehl unten wird nicht immer funktionieren . Wenn Sie nur:
und so weiter...
Um wirklich von vorne zu beginnen, die Branche herunterzuladen und alle Ihre lokalen Änderungen zu überschreiben, gehen Sie einfach wie folgt vor:
Dies wird gut funktionieren.
quelle
quelle
Schauen Sie sich git stash an, um alle Ihre lokalen Änderungen in eine "Stash-Datei" zu kopieren und zum letzten Commit zurückzukehren. An diesem Punkt können Sie Ihre versteckten Änderungen anwenden oder verwerfen.
quelle
Wenn Sie unter Linux arbeiten:
Die for-Schleife löscht alle verfolgten Dateien, die im lokalen Repo geändert wurden,
git pull
und funktioniert daher problemlos.Das Schönste daran ist, dass nur die verfolgten Dateien von den Dateien im Repo überschrieben werden, alle anderen Dateien bleiben unberührt.
quelle
Der kürzeste Weg dazu ist:
quelle
--autostash
vorher nichts , danke!das hat bei mir funktioniert
Mit der akzeptierten Antwort erhalte ich Konfliktfehler
quelle
Normalerweise mache ich:
Im Stammordner des Projekts.
quelle
Dadurch wird der aktuelle Zweig abgerufen und versucht, einen schnellen Vorlauf zum Master durchzuführen:
quelle
.gitignore
"Das Hinzufügen unerwünschter Dateien zu .gitignore funktioniert, solange Sie sie ursprünglich keinem Zweig zugewiesen haben."
Sie können auch ausführen:
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html
quelle