V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nullptr404
V2EX  ›  程序员

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

  •  
  •   nullptr404 · 2013-04-23 14:58:21 +08:00 · 108307 次点击
    这是一个创建于 4230 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想问下大家git如何删除本地所有未提交的更改,包括修改的、新增的、删除的,还有一些编译生成的临时文件。就是回到上一版本的干净状态。我查了下有两个相关的命令:
    1. git clean -df
    2. git reset --hard
    但问题是第一个命令只删除所有untracked的文件,如果文件已经被tracked, 修改过的文件不会被回退。而第二个命令只把tracked的文件revert到前一个版本,对于untracked的文件(比如编译的临时文件)都不会被删除。

    要达到我所说的目的,是不是必须要同时运行这两条命令?能不能只用一条命令就搞定的?
    15 条回复    2020-09-18 10:27:32 +08:00
    myrual
        1
    myrual  
       2013-04-23 15:02:05 +08:00
    试试
    git checkout -f
    ShadowStar
        2
    ShadowStar  
       2013-04-23 15:02:06 +08:00   ❤️ 4
    git checkout . && git clean -xdf
    kejinlu
        3
    kejinlu  
       2013-04-23 15:06:09 +08:00   ❤️ 1
    一般 git clean都是配合git reset 使用的

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

    如果没有加入暂存区的话 ,见楼上答案
    kejinlu
        4
    kejinlu  
       2013-04-23 15:06:42 +08:00
    @kejinlu 不是“以及” 是“已经”
    marvinlix
        5
    marvinlix  
       2013-04-23 15:11:28 +08:00   ❤️ 2
    git checkout -- .
    nullptr404
        6
    nullptr404  
    OP
       2013-04-23 15:23:45 +08:00
    @myrual git checkout -f 这条命令不会删除新增的文件
    nullptr404
        7
    nullptr404  
    OP
       2013-04-23 15:26:09 +08:00
    @marvinlix git checkout -- . 这条命令不会删除新增的文件
    nullptr404
        8
    nullptr404  
    OP
       2013-04-23 15:27:03 +08:00
    貌似必须得要两条命令才可以
    Jat001
        9
    Jat001  
       2013-04-23 15:53:07 +08:00
    推荐一个懒人办法,GitHub for Windows 和 GitHub for Mac 都有还原所有未 commit 的修改的功能。
    wujiangcheng
        10
    wujiangcheng  
       2013-04-23 20:49:14 +08:00
    git stash
    新加的文件还在,但所有的修改都会抹去
    bitsmix
        11
    bitsmix  
       2013-04-23 22:08:32 +08:00 via iPhone   ❤️ 1
    @wujiangcheng 你这完全是误入歧途。
    liubiantao
        12
    liubiantao  
       2015-10-09 11:02:14 +08:00
    @wujiangcheng
    @bitsmix

    stash 挺好用的啊, git add . && git stash && git stash drop ,至少不会影响 .gitignore 里面的不跟踪的文件
    netcatz
        13
    netcatz  
       2016-04-01 16:45:00 +08:00
    git fetch origin branch-name
    git reset --hard origin/branch-name
    netpi
        14
    netpi  
       2017-01-22 12:57:15 +08:00
    之前总结了一份 [Git 常用的撤销操作]( http://www.netpi.me/uncategorized/gitrevoke/)
    fffang
        15
    fffang  
       2020-09-18 10:27:32 +08:00
    这就是我用 source tree 的原因,一个简单的撤销竟然这么麻烦。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5283 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:36 · PVG 16:36 · LAX 00:36 · JFK 03:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.