Gibt es eine Möglichkeit, eine git pull
lokale Datei zu ignorieren, ohne das Verzeichnis wegzublasen und eine auszuführen git clone
?
rm -rf local_repo && git clone remote_url
.
Gibt es eine Möglichkeit, eine git pull
lokale Datei zu ignorieren, ohne das Verzeichnis wegzublasen und eine auszuführen git clone
?
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:
git reset --hard
git pull
Wenn nicht verfolgte lokale Dateien vorhanden sind, können Sie diese git clean
entfernen. Verwenden Sie git 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:
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 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:
$ git fetch --all
(2) Setzen Sie dann den Master zurück:
$ git reset --hard origin/master
(3) Ziehen / Aktualisieren:
$ git pull
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 reclone
oder git sync
) bereitstellt und svn auch keinen solchen Befehl (wie svn recheckout
oder svn sync
) bereitstellt .
Versuchen Sie den folgenden Befehl:
git reset --hard origin/master
git clean -fxd
git pull
git clean -fxd
entfernt auch Dateien von .gitignore
.
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
$ git reset --hard origin/thebranch
Dies wird gut funktionieren.
$ 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.
Wenn Sie unter Linux arbeiten:
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 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.
das hat bei mir funktioniert
git fetch --all
git reset --hard origin/master
git pull origin master
Mit der akzeptierten Antwort erhalte ich Konfliktfehler
Normalerweise mache ich:
git checkout .
git pull
Im Stammordner des Projekts.
.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:
git update-index --assume-unchanged filename
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html