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

当我运行git reset --hard HEAD时,它应该重置为你所拉的原始版本,据我所知。不幸的是,它留下了文件,因为git status显示了一大堆未跟踪的文件。

你如何告诉git“只是把它带回到最后一次拉的确切位置,没有更多,没有更少”?

278075 次浏览

您必须使用git clean -f -d来删除工作副本中未跟踪的文件和目录。 您可以添加-x来删除被忽略的文件,更多信息请参阅这个优秀的答案

如果您需要将包含子模块的整个存储库重置为master上的状态,请运行此脚本:

git fetch origin master
git checkout --force -B master origin/master
git reset --hard
git clean -fdx
git submodule update --init --recursive --force
git submodule foreach git fetch
git submodule foreach git checkout --force -B master origin/master
git submodule foreach git reset --hard
git submodule foreach git clean -fdx

如果您仍有要保留的文件:

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

你可能在某个时候做了一个软复位,你可以通过这样做来解决这个问题

git add .
git reset --hard HEAD~100
git pull
git reset --hard && git clean -df

或者,zsh提供了一个'gpristine'别名:

alias gpristine='git reset --hard && git clean -df'

这真的很方便。

可选:

git clean命令还有一个-x选项。它还将删除“git忽略”文件,因此如果您想要,也可以添加此选项。

如果在分叉的仓库上工作,请确保从正确的仓库/分支获取并重置,例如:

git fetch upstream && git reset --hard upstream/master && git clean -df

用户交互方法:

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

-i用于交互式
-f表示力
-d用于目录
-x用于忽略的文件(如果需要添加)

注:添加-n--dry-run来检查它会做什么。

您要查找的命令是git clean

您可以使用git stash。您必须指定--include-untracked,否则您将以原始问题结束。

git stash --include-untracked

那就把藏起来的最后一条丢进去

git stash drop

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

git config --global alias.discard "! git stash -q --include-untracked && git stash drop -q"

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

-d在未指定路径时使用。所以git递归到未跟踪的目录中删除它们。

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

-i/--interactive显示将做什么并以交互方式清理文件。

-n/--dry-run显示在不删除任何内容的情况下会发生什么。

-x忽略文件

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

您可以添加这个有用的别名来硬重置所有文件(跟踪和未跟踪)并返回到以前的提交版本:

git config --global alias.reset-hard '!f() { git reset --hard; git clean -df ; }; f'

然后你可以这样重置:

git reset-hard