742 Stimmen

Wie kann man mit `git pull` lokale Änderungen ignorieren?

Gibt es eine Möglichkeit, eine git pull die alle lokalen Datei-Änderungen ignoriert, ohne das Verzeichnis zu zerstören und eine git clone ?

29 Stimmen

Meinen Sie mit "ignorieren" "überschreiben"?

5 Stimmen

@Cascabel Es 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 aus, als ob rm -rf local_repo && git clone remote_url .

1 Stimmen

1151voto

Cascabel Punkte 449595

Wenn Sie meinen, dass der Pull lokale Änderungen überschreiben soll, indem Sie den Merge so durchführen, als ob der Arbeitsbaum sauber wäre, dann bereinigen Sie den Arbeitsbaum:

git reset --hard
git pull

Wenn es nicht verfolgte lokale Dateien gibt, können Sie Folgendes verwenden git clean um sie zu entfernen.

  • git clean -f um nicht verfolgte Dateien zu entfernen
  • -df um nicht verfolgte Dateien und Verzeichnisse zu entfernen
  • -xdf um nicht verfolgte oder ignorierte Dateien oder Verzeichnisse zu entfernen

Wenn Sie andererseits die lokalen Modifikationen irgendwie beibehalten wollen, würden Sie Stash verwenden, um sie vor dem Ziehen zu verstecken, und sie danach wieder anbringen:

git stash
git pull
git stash pop

Ich glaube nicht, dass es sinnvoll ist, wörtlich ignorieren. Die Hälfte von pull ist merge, und es muss die committed Versionen der Inhalte mit den Versionen, die es geholt hat, zusammenführen.

553voto

Artur Barseghyan Punkte 10480

Bei mir hat das folgende funktioniert:

(1) Holen Sie zunächst alle Änderungen:

$ git fetch --all

(2) Setzen Sie dann den Master zurück:

$ git reset --hard origin/master

Hinweis - Für Nutzer von github wurde "master" im Oktober 2020 durch "main" ersetzt. Für Projekte, die seither erstellt wurden, müssen Sie möglicherweise stattdessen "main" verwenden, z. B:

$ git reset --hard origin/main

(3) Abrufen/Aktualisieren:

$ git pull

55voto

Victor Punkte 1173

Sie wollen nur einen Befehl, der genau das gleiche Ergebnis liefert wie rm -rf local_repo && git clone remote_url richtig? Ich möchte auch diese Funktion. Ich frage mich, warum Git nicht einen solchen Befehl anbietet (wie git reclone o git sync ), noch bietet svn einen solchen Befehl (wie svn recheckout o svn sync ).

Probieren Sie den folgenden Befehl aus:

git reset --hard origin/master
git clean -fxd
git pull

41voto

DrBeco Punkte 10444

Der folgende Befehl wird nicht immer funktionieren . Wenn Sie nur tun:

$ 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...

An wirklich neu beginnen, die Verzweigung herunterladen und alle lokalen Änderungen überschreiben, tun Sie es einfach:


$ git checkout thebranch
$ git reset --hard origin/thebranch

Das wird schon klappen.

$ 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'

31voto

gil Punkte 2093

Der kürzeste Weg ist:

git pull --rebase --autostash

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