如何快速撤销上一次的commit

2019-12-22 08:06:48

撤销上一次的commit,但不删除修改文件,简单但操纵命令

git reset HEAD~1

一行代码解决

参考地址 Git add commit误操作撤销的方法


概述

在平时工作中使用git难免会提交一些错误的文件到git库里,这时候,撤销吧,怕把正确的文件删除了,不撤销重新改又很麻烦,下面,我就从提交的三个阶段,来讲解如何撤销错误的操作。

Git Add了一个错误文件

解决方法

这种情况一般发生在新创建的项目,执行命令:

git add .

命令执行完后发现增加了错误的文件,比如Pycham自动生成的.idea文件夹。比如下图:

这时候,我想撤销add .idea这个操作,可以这么做:

git reset <file> #撤销指定的文件  git reset #撤销所有的文件

执行完这个命令后,效果如下:

可以看到.idea这个目录变成了Untracked了。完美解决。 如果你在执行的时候遇到如下的错误:

fatal: Failed to resolve 'HEAD' as a valid ref.

如果遇到这个错误,就说明你的本地git仓库从来没有执行过git commit操作,导致HEAD指针不存在。这时候你可以通过如下的命令撤销操作:

git rm --cached .   #删除文件  git rm -r --cached . #删除文件和目录

如何避免

.gitignore: 把不需要提交的文件增加到这个文件  git add : 增加指定的文件,少用点号
Git Commit了一个错误文件

举例

我现在有个文件的状态如下:

执行git diff blog-test.py后结果如下:

可以看到我增加了一行,现在把文件提交到本地仓库:

可以看到,本地以及没有需要提交的文件了。这时候,我发现,这个修改是错误的,我需要撤销这次commit,我该怎么做了?

只撤销commit操作,保留文件

执行命令如下:

git reset HEAD~1

执行完效果如下:

可以看到,commit被撤销了,但是修改的部分还保留着。完美解决。不信看git log

撤销commit操作,删除变化

执行命令如下:

git reset --hard HEAD~1

执行完后效果如下:

可以看到,我增加的那一行已经没有了,git log中也没有了那次的提交记录:

完美

如何避免

  • git status: 查看是否有不需要的文件被add进来

  • git diff: 查看文件的变化部分,是否是想提交的

查看更多

Git如何取消最新一次的commit: http://bbs.bugcode.cn/t/7

如何删除分支

好,现在有个很严重的问题,我的分支里代码不用了,现在要删除,怎么整。

分支没有push到远程

删除本地的分支很简单:

git branch -d branch_name

举例截图如下:

分支已经push到远程

我现在本地和远程都有一个test分支,如下图:


执行如下的命令删除本地和远程的test分支:

git push origin --delete test  git checkout master  git branch -d test  #git branch -D test 如果有未提交的文件,用它

执行完效果如下:


可以看到都删掉了。

总结

出错不可怕,可怕的是你不知道为什么出错以及如何修复错误。所谓亡羊补牢,为时未晚。


  • 2018-12-04 15:33:19

    CocoaPods安装和使用教程

    当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。总之小编的意思就是,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。如果能有什么工具能解决这些恼人的问题,那将“善莫大焉”。所以,你需要 CocoaPods。

  • 2018-12-04 23:37:37

    pod install 和 pod update

    当我们新建一个Podfile文件运行后,会自动生成一个Podfile.lock文件,Podfile.lock文件里存储着我们已经安装的依赖库(pods)的版本。 当我们第一次运行Podfile时,如果对依赖库不指定版本的话,cocoapods会安装最新的版本,同时将pods的版本记录在Podfile.lock文件中。这个文件会保持对每个pod已安装版本的跟踪,并且锁定这些版本。

  • 2018-12-04 23:40:26

    pod删除已导入的第三方库和移除项目中的cocoapods

    CocoaPods是一个负责管理iOS项目中第三方开源库的工具。CocoaPods的项目源码在Github上管理。在我们有了CocoaPods这个工具之后,只需要将用到的第三方开源库放到一个名为Podfile的文件中,然后在命令行执行$ pod install命令。CocoaPods就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数. 但是如果我们导入的某个第三方不适用,或者我们又不想使用该第三方,那我们又该如何将这些相关的东西从我们的项目中清理出去呢?

  • 2018-12-04 23:41:47

    制作自己的Pod库(公有/私有)

    目的:1.管理自己常用的类;2.组件化开发步骤:1.想一个比较酷的名字,在桌面简历文件夹。2.打开terminal,cd到这个文件夹下面,执行pod lib create  xxx(这里我们以JJCategoryKit为例子,下同)命令,如下图。这个过程会问几个问题,根据实际情况输入回答即可。这里我们选择添加demo,结束的时候会自动Lanuch这个app. 作者:深水日月 链接:https://www.jianshu.com/p/ece0b5721461 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 2018-12-05 06:08:26

    CocoaPods建立私有仓库 spec repo

    好多项目里都有公共的组件,copy来,copy去很容易出错,而且不容易维护,所以就想到用用cocoapods 建自己的私有库,Carthage用法虽然相对简单,但是它是把公共组件都放在framework里不容易单步调试,所以我还是选择用Cocoapods 来建立私有仓库 参考使用Cocoapods创建私有podspec

  • 2018-12-05 15:11:18

    为什么 Objective-C非常难

    作为一个Objective-C的coder,我总能听到一部 分人在这门语言上抱怨有很多问题。他们总在想快速学习这门语言来写一个App出来,但他们也总是联想到Objective-C看上去实在太难了或者在想这 些语法符号都是神马玩意?不错,他们问得非常好,所以本人也解释一下为什么很多程序员相比较学习Ruby或者Java很容易,但在决定开发iOS或者OS X应用时会那么犹豫。

  • 2018-12-05 15:22:23

    十分钟让你明白Objective-C的语法(和Java、C++的对比)

    很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C++有着很大的区别,有的同学会感觉像是看天书一样。不过,语言都是相通的,有很多共性。下面列出Objective-C语言的语法和Java,C++的对比,这样你就会很容易Objective-C的语法是怎么回事了。

  • 2018-12-05 15:33:33

    一篇文章看懂有关iOS开发语言的一切!

    OS开发语言有哪些?OS开发语言主要包括什么?iOS开发语言具体怎么学习?今天重点介绍一下: iOS开发语言主要包括:C语言基础、Obiective-C编程、Swift、UIKit框架详解这几大块,在这里项目阶段就不详细的介绍了。 C语言基础 C语言是开发语言的基础,是最常用的一门程序设计语言,最常用于编写计算机程序。

  • 2018-12-06 10:03:36

    定时杀掉processlist sleep状态的线程

    由于程序设计的Bug,导致目前这个项目使用的数据库中有很多Sleep状态的线程。找了很多解决办法,还没发现最终有效的解决方案。只能临时使用如下方法: 编写shell文件,如killSleepProcess.sh