【问题标题】:Discard all uncommitted changes, modified files, added files and non-added丢弃所有未提交的更改、修改的文件、添加的文件和未添加的文件
【发布时间】:2019-08-08 05:28:19
【问题描述】:

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

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

git undo all uncommitted or unsaved changes

git reset

“这将取消暂存您可能使用 git add 暂存的所有文件”,unstage 是什么意思?

这是否意味着删除所有添加的文件?

git checkout .

“恢复所有本地未提交的更改(应在 repo root 中执行)”

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

git clean -fdx

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

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

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

【问题讨论】:

标签: git git-reset


【解决方案1】:

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

git checkout HEAD -- .

或者(正如eftshift0Code-Apprentice在他们的回答中已经建议的那样)

git reset --hard HEAD

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

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

git stash

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


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

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

【讨论】:

  • @rkta 没错。但我指的是未提交的更改,尽管您确实可以回到 reflog 中的先前状态,但您不会恢复未提交的更改。
【解决方案2】:

unstage 是什么意思?

“unstage”表示从索引中删除更改。索引是您在提交更改之前暂存更改的位置。取消暂存不会从您的工作目录中删除任何文件或撤销任何更改。

什么是根?

这里,“root”是指项目的基本目录。它与分支或提交无关。

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

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

git reset --hard HEAD

【讨论】:

  • git reset --hard HEADgit reset --hard有什么区别
  • 无。 HEAD 隐含在您不显式传递 ref 时。
【解决方案3】:

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

git reset --hard

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

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 2011-03-30
    • 2016-10-16
    • 1970-01-01
    • 2019-08-10
    • 2012-08-23
    • 2020-06-02
    相关资源
    最近更新 更多