摆脱跟踪和未跟踪的更改并返回到以前的状态

问题描述

如果在做了git status之后我有

  1. 一些未暂存但已跟踪的更改(修改后的文件
  2. 一些未暂存但未跟踪的文件包括文件

摆脱这些的正确方法是什么。更明确地说,我希望我的文件与更改或删除文件之前完全一样。

(考虑到我可能还暂存了我想提交的文件

解决方法

要删除未跟踪的文件,请使用 git clean。请注意,此操作无法被 Git 撤消(您的操作系统可能会或可能不会提供一些恢复已删除文件的方法,但根据定义,未跟踪文件是,不在 Git 的索引中,这通常意味着它根本不在 Git 中,因此 Git 无法将其取回)。

要删除带有 git clean 的文件,您必须使用 -f 选项。这将删除一些未跟踪的文件,但不会删除未跟踪和忽略的文件。要删除这些文件,也可以使用 -x 选项。要删除清空的目录,也请添加 -d 选项:

git clean -dfx

删除那些根本不在 Git 中的文件后,您可以使用 git reset --hard commit 将当前分支名称​​移动到指定的提交和检查该提交,或 git reset --hard 将当前分支名称保留在原处,但重新设置文件的所有索引和工作树副本以匹配当前提交。或者,您可以使用 git checkout -f --detach commit 强制检查给定的提交,覆盖通常的检查以确保这不会丢弃修改后的文件。 --detach 状态会导致 HEAD 分离,即使您使用分支名称来选择提交也是如此。

这样做很少是一个好主意,但特殊情况确实会发生。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...