关于git:丢弃所有未提交的更改,修改的文件,添加的文件和未添加的文件

Discard all uncommitted changes, modified files, added files and non-added

使用Git放弃未提交更改的最佳方法是什么?

我读了这篇文章,但想完全理解每一步都在做什么。

Git撤消所有未提交或未保存的更改

1
git reset

"这将取消存储所有可能使用git add进行的文件",取消存储是什么意思?

这是否意味着删除任何添加的文件?

1
git checkout .

号"还原所有本地未提交的更改(应在repo root中执行)"

什么是根?如果我在分支A上,并且我想忽略分支A上所有未提交的更改,那么分支A是否被视为根?

1
git clean -fdx

"警告:-x还将删除所有被忽略的文件,包括.gitignore指定的文件!您可能希望使用-n预览要删除的文件。"

这是在删除我的文件吗?包括被忽略的文件?如果忽略的文件没有更改怎么办?

我只想回到上一次提交,而不担心它之后的任何更改。最简单最安全的方法是什么?


当人们认为f%ck它的时候,他们通常会这样做,我不想看到我面前的东西,我想把我的工作树上的所有东西都像上一次修订的一样,然后忘记其他的东西:

1
git reset --hard

小心使用:这将使您的工作树与您所处的修订版保持一致,工作树和索引中的所有更改都将被丢弃,这样您就不会再看到它们。


what does unstage mean?

"不稳定"是指从索引中删除更改。索引是在提交更改之前对其进行阶段化处理的地方。取消分页不会删除任何文件或撤消工作目录中的任何更改。

What is considered the root?

这里,"根"指的是项目的基目录。它与分支或提交无关。

I simple want go back to my last commit and not worry about any changes after it. What is the simplest and safest way to do that?

放弃所有本地更改的最简单方法是

1
git reset --hard HEAD


你可以(从你的回购根目录)

1
git checkout HEAD -- .

或者(正如EFTShift0和代码学徒在他们的答案中所建议的那样)

1
git reset --hard HEAD

这两个命令都会将您的文件恢复到上次提交时的状态。

但警告:此操作无法撤消。如果您对这些失败的更改的未来使用有任何疑问,那么对stash它们来说,这是一个更好的主意:

1
git stash

(并有可能在以后检查或重复使用)

关于您考虑的其他命令,EDOCX1(此处暗含HEAD)将"仅"从索引中获取所有更改,而不是从工作树中获取。因此,您不需要的更改仍然存在于您的文件中,只是为下一次提交而取消了标记。

注意git clean -fdx,如果使用不当,这是一个危险的命令,因为它会删除所有未跟踪的文件。它有它的用途,但在您描述的情况下(使您的项目处于最后提交的状态),它不是您需要的。