如何从工作目录中删除所有更改,包括新的未跟踪文件。我知道这样git checkout -f
做,但是它不会删除自上次提交以来创建的新的未跟踪文件。
有人知道该怎么做吗?
如何从工作目录中删除所有更改,包括新的未跟踪文件。我知道这样git checkout -f
做,但是它不会删除自上次提交以来创建的新的未跟踪文件。
有人知道该怎么做吗?
Answers:
git reset --hard # removes staged and working directory changes
## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)
要查看将要事先删除的内容而不实际删除它,请使用该-n
标志(这基本上是一个测试运行)。当您准备好实际删除时,请删除该-n
标志:
git clean -nfd
git clean -fxd
如果您不知道自己在做什么,可能会非常危险。您可能最终会永久删除一些非常重要的未跟踪文件,例如数据库等。请谨慎使用。
git clean -f -d
也会从忽略的文件夹中删除文件。因此,您所有的本地日志以及类似的内容都将消失。通常这不是一个大问题,但最好知道。
我经常使用的最安全的方法:
git clean -fd
/docs/git-clean
每页的语法说明:
-f
(别名: --force
。如果Git配置变量clean.requireForce未设置为false,则git clean将拒绝删除文件或目录,除非指定-f,-n或-i。除非给出第二个-f,否则Git将拒绝删除带有.git子目录或文件的目录。-d
。除未跟踪的文件外,还删除未跟踪的目录。如果未跟踪的目录由其他Git存储库管理,则默认情况下不会将其删除。如果您确实要删除这样的目录,请使用-f选项两次。如评论中所述,最好先执行git clean -nd
一次空运行并告诉您在实际删除之前要删除的内容。
链接到git clean
文档页面:https:
//git-scm.com/docs/git-clean
git clean -nd .
在实际删除文件之前使用git clean -fd .
add -A
+ commit -a
+ revert head
第一前git clean
。检查每个删除操作根本无法适应主要情况。同样,空转并不是万灵丹:如果您在审查过程中错过了某些东西或犯了错误怎么办?
src/app/work/filename.js
和../app/working/test/filename.js
。仅git checkout -- .
在分支上使用仅删除第一个文件(不带前导../)。因此,我必须cd ../
进入第二个位置目录才能使用该命令删除第二个文件。
以下作品:
git add -A .
git stash
git stash drop stash@{0}
请注意,这将同时丢弃您未上演的和已上演的本地更改。因此,在运行这些命令之前,您应该提交任何您想保留的内容。
一个典型的用例:到处移动了许多文件或目录,然后又想回到原始状态。
git stash drop
?
git add -A .
)中。我丢失了3000万,因为没有文件匹配。谢谢!
我以为是这样(警告:以下内容将清除所有内容)
$ git reset --hard HEAD
$ git clean -fd
该reset
撤消更改。的clean
以除去任何未跟踪˚F尔斯和d irectories。
git pull
事后我仍然收到冲突警告:CONFLICT (content): Merge conflict in...
我只能通过git pull --strategy=ours
git reset --hard origin/{branchName}
它将删除所有未跟踪的文件。
另一种解决方案是提交更改,然后删除那些提交。起初这并没有立即带来的好处,但是它提供了分批提交并创建git标签进行备份的可能性。
您可以在当前分支上执行此操作,如下所示:
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01 # optional
git revert HEAD
git reset HEAD^^
或者,您可以在分离的HEAD上执行此操作。(假设您从BRANCHNAME分支开始):
git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01 # optional
git checkout BRANCHNAME
但是,我通常要做的是分块提交,然后将部分或全部提交命名为“ DISCARD:...”。然后使用交互式rebase删除错误的提交并保留好的提交。
git add -p # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id) # rebase on the commit id before the changes.
# Remove the commits that say "DISCARD".
这比较冗长,但是可以准确地查看您要放弃的更改。
该git lol
和git lola
快捷方式已经与此工作流程很有帮助。
这可能是一个简单的答案,但是:我在Windows上使用TortoiseGit,它具有一个称为REVERT的不错的功能。因此,要还原本地未分段的非推送更改,您需要执行以下操作:
git help reset
和git help clean