当我运行git reset -hard HEAD时,它应该重置为你所拉的原始版本,据我所知。不幸的是,它会让文件到处乱放,因为git状态显示了一大串未跟踪的文件。

你怎么告诉少不再来的人“只是把它拉回到最后拉的地方,不多也不少”?


当前回答

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

git add .
git reset --hard HEAD~100
git pull

其他回答

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

如果你需要将整个存储库的子模块重置到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会进行交互式的清理,允许你只删除你不想要的文件/dirs。

您正在寻找的命令是git clean

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

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

然后你可以这样重置:

git reset-hard

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

-d use当没有指定路径时。所以git递归到未跟踪的目录中删除它们。

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

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

显示不删除任何东西会发生什么。

-x忽略文件

例如:git clean -f -d ->删除当前目录下所有未跟踪的文件。