如何快速撤消 git 中的暂存和未暂存的更改?

Posted

技术标签:

【中文标题】如何快速撤消 git 中的暂存和未暂存的更改?【英文标题】:How to quickly undo staged and unstaged changes in git? 【发布时间】:2013-04-16 03:03:43 【问题描述】:

在 Git 中撤消更改(暂存和未暂存)的最快方法是什么?

两个文件都未暂存。

$ git status -s
 M file1.txt # unstaged
?? oops.txt # unstaged

一个文件暂存,一个文件未暂存。

$ git status -s
M  file1.txt # staged
?? oops.txt # unstaged

我可以 add 全部索引,然后 stash savedrop

$ git add .
$ git stash save
$ git stash drop
$ git status
nothing to commit, working directory clean

有没有更快的方法?

【问题讨论】:

【参考方案1】:

git rm --cached -r .

//将Unstaged git中所有已暂存/跟踪的文件

【讨论】:

【参考方案2】:

取消暂存所有暂存文件使用命令:

git reset HEAD

取消暂存单个文件暂存文件(例如:app.js)使用命令:

git reset HEAD app.js

Git 版本 2.23.0 中引入了一个新命令 git restore

取消暂存文件,请使用:

git restore --staged app.js

此命令将从暂存区域中删除文件并将其移回工作目录,更改不变。

撤消文件中的更改并将其恢复为原始内容,请使用:

git restore app.js

注意:您将丢失自上次提交以来对其文件所做的所有更改。

【讨论】:

【参考方案3】:
git reset HEAD
git checkout .

git reset HEAD 将取消暂存所有更改,git checkout . 丢弃所有更改。

【讨论】:

【参考方案4】:

您需要使用两个命令:git reset --hardgit clean -fd.git reset --hard 将撤消所有暂存更改和 git clean -fd,未暂存更改(文件和目录)。您可以创建一个别名来执行这两个命令。为此,只需在您的 .gitconfig 中添加以下行:

[alias]
  undo = '!git reset --hard && git clean -fd'

【讨论】:

我添加了别名undo = !"git reset --hard && git clean -f" 不错.. 如果您想知道爆炸的来源:***.com/questions/10641451/… 这个答案使用了不正确的术语。 git reset --hard 丢弃所有更改,在索引中暂存,在工作树中未暂存git clean -fd 删除所有未被跟踪的文件和目录。例如在本地构建的任何东西,例如 .o 文件、来自配置脚本的 config.make、您的 tags 等等。 什么是“!”为了? @PhilipRego ! 使它成为一个 shell 命令,而不仅仅是 git 的参数。在这种情况下,它用于多次运行 git。【参考方案5】:

您可以使用git clean

$ git状态-s ??哎呀.txt $ 混帐清理 -f 删除 oops.txt $ git状态-s

更多信息:

通过递归删除不属于的文件来清理工作树 在版本控制下,从当前目录开始。

【讨论】:

尽管git reset --hardgit clean -f 两者我都需要。

以上是关于如何快速撤消 git 中的暂存和未暂存的更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何撤消 git 中的最后一次提交,但保持我的更改未暂存?

git常用操作合集

Git stash uncached:如何存放所有未暂存的更改?

Git从青铜到王者第三篇:Git的基础

本地分支在没有明显原因的情况下显示未暂存的更改和未跟踪的文件[重复]

放弃Git中未暂存的更改