git reset --hard HEAD留下未跟踪的文件

Kar*_*arl 536 git

当我跑步时git reset --hard HEAD,它应该重置为你所拉的原始版本,据我所知.不幸的是,它留下了文件,git status显示了一个未跟踪文件的大列表.

你怎么告诉git"只是把它带回到最后一次拉动中,没有更多,没有更少"?

kni*_*ttl 833

您必须使用git clean -f -d来删除工作副本中未跟踪的文件和目录.

如果需要将整个存储库重置为master(包括所有git子模块),请运行以下脚本:

git reset --hard HEAD
git clean -f -d
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule update
git submodule update --init --recursive
git submodule foreach git reset --hard HEAD
git submodule foreach git clean -f -d
git submodule foreach git submodule update --init --recursive
git submodule foreach git fetch
git submodule foreach git pull
git status
Run Code Online (Sandbox Code Playgroud)

  • 如果要删除.gitignored文件并返回原始状态,也可以使用`-x`. (53认同)
  • 添加`-n`进行测试将首先被删除.将所有这些组合在一个参数中:`-dfn` (40认同)
  • 我的常用命令是`git clean -qfdx`.删除所有内容并以静默方式执行. (28认同)
  • `-d -f` 可以为 `-d -f -f` 标记两次 `-dff`,这将删除所有未跟踪的目录,包括受保护的未跟踪目录。 (5认同)
  • @BKSpurgeon:是的,它会删除文件.你是什​​么意思»我想要像以前那样没有跟踪的文件«?Git对未跟踪的文件一无所知,除了它们存在.它不会跟踪这些文件的多个版本(因为它们是_untracked_). (2认同)
  • @knittl - 当然这很有意义!我对 git 缺乏经验,因此我的问题很愚蠢。谢谢澄清。+1。 (2认同)

Sog*_*ger 54

如果你有文件,你仍然想要保留:

git clean -di 将进行交互式清理,只允许您删除不再需要的文件/目录.


jjn*_*vis 41

git reset --hard && git clean -dfx
Run Code Online (Sandbox Code Playgroud)

或者,zsh提供'gpristine'别名:

alias gpristine='git reset --hard && git clean -dfx'
Run Code Online (Sandbox Code Playgroud)

这真的很方便

  • 抱歉,如果这不是一个安全的命令 - 我不是想要安全,我试图回答这个问题.你能评论一下这是否回答了这个问题? (7认同)
  • 无论谁得到这个答案,都不要执行`git clean -dfx`。这也会删除被忽略的文件。执行此命令并不安全,除非您知道自己在做什么 (6认同)
  • **这很危险,因为如果您刚刚克隆了回购邮件,它也会删除被忽略的文件**和`-x`.如果这就是你想要的,那就完美了.如果您只想删除_untracked_文件,删除`-x`选项效果很好. (3认同)
  • 这很好用,应该内置到git IMHO中(尽管我不确定我是否会常规使用-x)。很多次我在本地项目上工作,但尚未同步到github等,混乱的重构使IDE的“撤消”状态陷入了混乱。我的本能是恢复到最后一次提交,但是谷歌搜索通常需要回答倒数第二次提交,而不是最后一次提交。我要做的只是回到最近的提交。做到这一点。应该是一个更简单的方法。谢谢莱纳斯!;-) (2认同)
  • 感谢上帝的`gpristine` (2认同)
  • 并删除 Intellij 设置;) (2认同)

Nik*_*lic 17

您可以使用git stash. 您必须指定--include-untracked,否则您最终会遇到原始问题。

git stash --include-untracked
Run Code Online (Sandbox Code Playgroud)

然后将最后一个条目放入藏匿处

git stash drop
Run Code Online (Sandbox Code Playgroud)

您可以为此创建一个方便的别名,并将其命名git discard为例如:

git config --global alias.discard "! git stash -q --include-untracked && git stash drop -q"
Run Code Online (Sandbox Code Playgroud)

  • 比“git clean”选项简单且更直观。 (2认同)

bit*_*007 16

用户互动方式:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Run Code Online (Sandbox Code Playgroud)

-i for interactive
-f for force
-d for directory
-x for ignored files(如果需要,添加)

注意: 添加-n--dry-run以检查它将执行的操作.


Yur*_*ake 5

git-clean 用于删除工作树中未跟踪的文件。以下是一些可与命令一起使用的选项(简要)git clean

-d未指定路径时使用。因此 git recurse 到未跟踪的目录中删除它们。

-f/--force删除嵌套的未跟踪文件。

-i/--interactive显示将要执行的操作并以交互方式清理文件。

-n/--dry-run展示在不删除任何东西的情况下会发生什么。

-x忽略文件

示例:git clean -f -d-> 删除当前目录任何子目录中所有未跟踪的文件。