git如何删除本地所有未提交的更改

2013 年 4 月 23 日
 nullptr404
想问下大家git如何删除本地所有未提交的更改,包括修改的、新增的、删除的,还有一些编译生成的临时文件。就是回到上一版本的干净状态。我查了下有两个相关的命令:
1. git clean -df
2. git reset --hard
但问题是第一个命令只删除所有untracked的文件,如果文件已经被tracked, 修改过的文件不会被回退。而第二个命令只把tracked的文件revert到前一个版本,对于untracked的文件(比如编译的临时文件)都不会被删除。

要达到我所说的目的,是不是必须要同时运行这两条命令?能不能只用一条命令就搞定的?
109335 次点击
所在节点    程序员
15 条回复
myrual
2013 年 4 月 23 日
试试
git checkout -f
ShadowStar
2013 年 4 月 23 日
git checkout . && git clean -xdf
kejinlu
2013 年 4 月 23 日
一般 git clean都是配合git reset 使用的

如果你有的修改以及加入暂存区的话
那么
git reset --hard
git clean -xdf

如果没有加入暂存区的话 ,见楼上答案
kejinlu
2013 年 4 月 23 日
@kejinlu 不是“以及” 是“已经”
marvinlix
2013 年 4 月 23 日
git checkout -- .
nullptr404
2013 年 4 月 23 日
@myrual git checkout -f 这条命令不会删除新增的文件
nullptr404
2013 年 4 月 23 日
@marvinlix git checkout -- . 这条命令不会删除新增的文件
nullptr404
2013 年 4 月 23 日
貌似必须得要两条命令才可以
Jat001
2013 年 4 月 23 日
推荐一个懒人办法,GitHub for Windows 和 GitHub for Mac 都有还原所有未 commit 的修改的功能。
wujiangcheng
2013 年 4 月 23 日
git stash
新加的文件还在,但所有的修改都会抹去
bitsmix
2013 年 4 月 23 日
@wujiangcheng 你这完全是误入歧途。
liubiantao
2015 年 10 月 9 日
@wujiangcheng
@bitsmix

stash 挺好用的啊, git add . && git stash && git stash drop ,至少不会影响 .gitignore 里面的不跟踪的文件
netcatz
2016 年 4 月 1 日
git fetch origin branch-name
git reset --hard origin/branch-name
netpi
2017 年 1 月 22 日
之前总结了一份 [Git 常用的撤销操作]( http://www.netpi.me/uncategorized/gitrevoke/)
fffang
2020 年 9 月 18 日
这就是我用 source tree 的原因,一个简单的撤销竟然这么麻烦。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/66718

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX