如何快速撤消 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
save
和 drop
。
$ 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 --hard
和 git 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 --hard
和git clean -f
两者我都需要。以上是关于如何快速撤消 git 中的暂存和未暂存的更改?的主要内容,如果未能解决你的问题,请参考以下文章
Git stash uncached:如何存放所有未暂存的更改?