丢弃所有未提交的更改、修改的文件、添加的文件和未添加的

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

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

我读了这篇文章,但想完全理解每一步的作用。

git undo all uncommitted or unsaved changes

git reset

"This will unstage all files you might have staged with git add",unstage是什么意思?

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

git checkout .

"revert all local uncommitted changes (should be executed in repo root)"

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

git clean -fdx

"WARNING: -x will also remove all ignored files, including ones specified by .gitignore! You may want to use -n for preview of files to be deleted."

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

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

你可以(从你的 repo 根)

git checkout HEAD -- .

或者(正如 and 在他们的回答中所建议的那样)

git reset --hard HEAD

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

警告:此操作不可撤销。如果您对将来使用这些失败的更改有任何疑问,最好 stash 它们 :

git stash

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


关于您考虑的其他命令,git reset(此处隐含 HEAD)将 "only" 从索引中获取所有更改,而不是从工作树中获取所有更改。因此,您不需要的更改仍会存在于您的文件中,只是在下一次提交时未暂存。

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

当人们想到 f%ck it 时通常会这样做,我不想看到我面前的东西,我想把我工作树上的所有东西都照原样拿走在上次修订中忘记其他一切 是:

git reset --hard

谨慎使用:它将使您的工作树与您所在的修订版保持一致,工作树和索引中的所有更改都将被丢弃,因此您不会再看到它们。

what does unstage mean?

"unstage" 表示更改已从索引中删除。索引是您在提交更改之前暂存更改的地方。 Unstaging 不会删除任何文件或撤消工作目录中的任何更改。

What is considered the root?

这里的"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?

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

git reset --hard HEAD