Gibt es einen git-Befehl, um alle nicht festgeschriebenen Änderungen in einem Arbeitsbaum und Index zurückzusetzen und auch neu erstellte Dateien und Ordner zu entfernen?
Gibt es einen git-Befehl, um alle nicht festgeschriebenen Änderungen in einem Arbeitsbaum und Index zurückzusetzen und auch neu erstellte Dateien und Ordner zu entfernen?
Antworten:
Sie können diese beiden Befehle ausführen:
# Revert changes to modified files.
git reset --hard
# Remove all untracked files and directories.
# '-f' is force, '-d' is remove directories.
git clean -fd
git clean -i
für einen interaktiven Modus.
git merge --abort
.
Wenn Sie die Änderungen nur im aktuellen Arbeitsverzeichnis rückgängig machen möchten, verwenden Sie
git checkout -- .
Und davor können Sie die Dateien auflisten, die zurückgesetzt werden, ohne tatsächlich etwas zu unternehmen, um zu überprüfen, was passieren wird, mit:
git checkout --
git reset --hard
?
Verwenden Sie "git checkout - ...", um Änderungen im Arbeitsverzeichnis zu verwerfen
git checkout -- app/views/posts/index.html.erb
oder
git checkout -- *
Entfernt alle Änderungen, die an nicht bereitgestellten Dateien im Git-Status vorgenommen wurden, z
modified: app/controllers/posts.rb
modified: app/views/posts/index.html.erb
git checkout -- *
funktioniert bei mir nur, wenn ich mich in dem Verzeichnis befinde, in dem sich die geänderten Dateien befinden. Um alle Dateien im gesamten Repository git checkout -- :/
git checkout -- *
wird der Stern durch die Shell mit allen Dateien und Verzeichnissen im aktuellen Verzeichnis ersetzt. Also sollte es in Unterverzeichnisse gehen. Für mich geht das. Aber dank der Hervorhebung der Syntax ": /", die meiner Meinung nach sauberer ist.
Eine nicht triviale Möglichkeit besteht darin, diese beiden Befehle auszuführen:
git stash
Dadurch werden Ihre Änderungen in den Stash verschoben und Sie kehren in den Status HEAD zurückgit stash drop
Dadurch wird der zuletzt im letzten Befehl erstellte Stash gelöscht.fatal: git-write-tree: error building trees Cannot save the current index state
git clean -fd
hat nicht geholfen, neue Dateien blieben. Was ich getan habe, ist das Löschen des gesamten Arbeitsbaums und dann
git reset --hard
Weitere Informationen zum Hinzufügen der -x
Bereinigungsoption finden Sie unter " Wie lösche ich mein lokales Arbeitsverzeichnis in Git? ".
git clean -fdx
Das Hinweis- -x
Flag entfernt alle von Git ignorierten Dateien. Seien Sie also vorsichtig (siehe Diskussion in der Antwort, auf die ich mich beziehe).
Ich denke, Sie können den folgenden Befehl verwenden: git reset --hard
Bitte beachten Sie, dass es möglicherweise noch Dateien gibt, die nicht zu verschwinden scheinen - sie sind möglicherweise unbearbeitet, aber git hat sie möglicherweise aufgrund von CRLF / LF-Änderungen als bearbeitet markiert. Überprüfen Sie, ob Sie in .gitattributes
letzter Zeit einige Änderungen vorgenommen haben .
In meinem Fall habe ich der .gitattributes
Datei CRLF-Einstellungen hinzugefügt und alle Dateien blieben aus diesem Grund in der Liste "Geänderte Dateien". Durch Ändern der Einstellungen für .gitattributes wurden diese ausgeblendet.
Wenn Sie eine nicht festgeschriebene Änderung haben (die nur in Ihrer Arbeitskopie enthalten ist), die Sie in Ihrer letzten Festschreibung auf die Kopie zurücksetzen möchten, gehen Sie wie folgt vor:
git checkout filename
git rm filename
und es funktioniert nicht. error: pathspec 'filename' did not match any file(s) known to git.
git rm
istgit checkout master -- filename
Git 2.23 führte den git restore
Befehl zum Wiederherstellen von Arbeitsbaumdateien ein.
https://git-scm.com/docs/git-restore
So stellen Sie alle Dateien im aktuellen Verzeichnis wieder her
Git wiederherstellen.
Wenn Sie alle C-Quelldateien so wiederherstellen möchten, dass sie mit der Version im Index übereinstimmen, können Sie dies tun
Git wiederherstellen '* .c'
Sie können einfach den folgenden git-Befehl verwenden, mit dem alle nicht festgeschriebenen Änderungen in Ihrem Repository zurückgesetzt werden können:
git checkout .
Beispiel:
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: application/controllers/Drivers.php
modified: application/views/drivers/add.php
modified: application/views/drivers/load_driver_info.php
modified: uploads/drivers/drivers.xlsx
no changes added to commit (use "git add" and/or "git commit -a")
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git checkout .
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
Ein sicherer und langer Weg:
git branch todelete
git checkout todelete
git add .
git commit -m "I did a bad thing, sorry"
git checkout develop
git branch -D todelete