撸了好多代码,但是突然设计改了(~~o(>_<)o ~~);或者引入个第三方库,后来又发现用不着,想删掉,但文件太多了(比如几百个);那,怎么办呢,都不想了...Git 比人聪明,所以能很方便的帮我们解决问题。

场景一

需要撤销的内容文件属于未跟踪的状态。如下命令产生的场景:

mkdir git-tmp
cd git-tmp
git init
echo '第1次输入的内容' > file1.log
git status

以上命令产生了file1.log文件,该文件未被执行过git add、也不在版本库中。清除此类未被跟踪的文件:

git clean -fdx

场景二

需要撤销的内容已被git add暂存,但未执行git commit提交。如下命令产生的场景:

mkdir git-tmp
cd git-tmp
git init
echo '第1次输入的内容' > file1.log
git add .
git status

那么执行以下命令即可取消文件的暂存:

git rm --cached -r .

或者,使用:

git reset

也可以取消所有文件的暂存。

然后,我们再执行git clean -fdx清除文件。

场景三

已提交在版本库中的文件发生了变更、但修改的内容未暂存。如下命令产生的场景:

mkdir git-tmp
cd git-tmp
git init
echo '第1次输入的内容' >> file1.log
git add .
git commit -m '第1次提交'
echo '第2次输入的内容' >> file1.log
git status

这种情况,我们可用:

git checkout .

就可以清除所有变更内容。

场景四

已在版本库中的文件发生了变更、且已git add暂存。如下命令产生的场景:

mkdir git-tmp
cd git-tmp
git init
echo '第1次输入的内容' >> file1.log
git add .
git commit -m '第1次提交'
echo '第2次输入的内容' >> file1.log
git add .
git status

这种情况,比场景三仅多了步暂存,那我们可以先取消暂存、然后再检出:

git reset
git checkout .

也就是场景二和场景三的混合情况。

总结

我们以上所有场景都是内容未被提交(commit)的情况下。如果是撤销提交操作,那就是其他方法了。

基于以上,我们发现,如果对于已修改的所有内容,我们都不想要了,想回到最干净的上个提交版本的状态。那么,3个命令就可以搞定一切:

git reset
git checkout .
git clean -fdx

最后,再说个小白都能解决该类问题的工具 —— SourceTree,自行尝试吧。


原文地址: https://shockerli.net/post/git-undo-uncommit-content/

Git 撤销所有未提交(Commit)的内容的更多相关文章

  1. git把dev部分提交过的内容合并到master

    git 把dev部分提交过的内容合并到master $ git reflog a6de5cc HEAD@{}: checkout: moving from wf_dev to master 303aa ...

  2. GIT 如何在不提交Commit的情况下切换分支

    最近遇到一个问题,事情是这样子的,刚刚接到客户说他的项目有问题,于是就打开本地的源码查看经过排查确定了问题,于是就开始进行修正工作 将问题修复好准备提交到git的时候发现当前的分支是不对的,但问题是我 ...

  3. git<git rebase 修改以前提交过的内容>

      git rebase 使用总结: 使用git rebase 修改以前已经提交的内容 比如要修改之前的commit的 hashcode为:187f869c9d54c9297d6b0b1b4ff47d ...

  4. Linq to SQL - 撤销所有未提交的改动

    在某些情况下我们需要撤销/丢弃所有未提交的改动,包括Update, Delete和Insert.context中GetChangeSet()方法可以返回当前所有未提交的改动,而我们的目标是清空Chan ...

  5. git 撤销上一次 commit

    1.本地 commit,没有推到远程仓库 可以 git reset --soft <commit_id>,commit_id 是要回退到的某一版本 然后再进行修改,再commit, 如果需 ...

  6. git撤销某次提交

    1.查询提交记录.进入目录,查看某人在此目录下的commit: panxi@ww-bj-panxi MINGW64 [path]/Business (feature/v2.3) $ git log f ...

  7. git修改最后一次commit的内容

    提交修改 $ git add test.txt $ git commit -m "提交test.txt文件" 修改注释说明 如果需要修改commit的注释说明,则执行以下命令: $ ...

  8. Git本地有未提交文件,直接拉取远端最新版本

    git pull = git fetch + git merge 1.修改不同的文件: 用户D和用户L在本地提交中修改了不同的文件,如果用户D将改动推送到服务器后,用户L再推送就会遇到非快进式推送错误 ...

  9. git撤销提交(commit)

    我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited) 一.简介 Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照 ...

随机推荐

  1. PageHelper分页+前台BootStrap_pagination样式/BootStrap_table样式

    一.PagerHelper分页+前台BootStrap_pagination样式: 效果: 1.引入pageHelper插件:2种方式    pageHelper所需jar包:pagehelper-5 ...

  2. POI对Excel的操作

    1. 先导包 commons-io-2.6.jar包,用于对文件的操作. 下载地址:http://commons.apache.org/proper/commons-io/download_io.cg ...

  3. NGUI 摇奖滚轮

    效果图: 优缺点: 优点: 1.一条曲线完美解决旋转问题 2. 解决了超速的问题,现在速度再快也不会乱了 3.快速停止的时候进行了进度区分,后面的会等前面的停了再停 缺点: 1.停止节奏上会有细微差距 ...

  4. HDFS JAVA客户端的权限错误:Permission denied

    HDFS JAVA客户端的权限错误:Permission denied 转自:http://blog.csdn.net/kkdelta/article/details/50393413 搭建了一个Ha ...

  5. C# WebSocket Fleck 调用非托管C++ DLL 实现通信(使用stringbuilder接收)

     [DllImport(@"XXX.dll", CallingConvention = CallingConvention.StdCall)]public static exter ...

  6. 最容易理解的对卷积(convolution)的解释

    啰嗦开场白 读本科期间,信号与系统里面经常讲到卷积(convolution),自动控制原理里面也会经常有提到卷积.硕士期间又学了线性系统理论与数字信号处理,里面也是各种大把大把卷积的概念.至于最近大火 ...

  7. SQL Server profile使用技巧

    200 ? "200px" : this.width)!important;} --> 介绍 经常会有人问profile工具该怎么使用?有没有方法获取性能差的sql的问题.自 ...

  8. JavaScript异步编程的Promise模式

    参考: http://www.infoq.com/cn/news/2011/09/js-promise http://www.cnblogs.com/rubylouvre/p/3495286.html ...

  9. CSRF 攻击(跨域攻击)

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...

  10. 项目文件与 SVN 资源库同步提示错误 Attempted to lock an already-locked dir

    问题描述 之前为了图方便,在eclipse中直接把三个jsp文件复制到了eclipse中我新建的一个文件夹中,把svn版本号信息也带过来了,然后我又删除了这三个jsp文件,接着先把这三个jsp复制到桌 ...