默认使用 yum 或者 apt 安装Git 的时候,版本会比较老,所以这里使用源码方式进行安装。
Git 恢复和还原
删除未被跟踪的文件
$ git clean [param]
`-n` 仅显示需要删除的文件,并不进行删除
`-d` 删除文件和目录
`-f` 强制删除
`-x` 删除忽略和为忽略的文件
`-X` 仅删除忽略的文件
显示哪些文件可以删除 : $ git clean -n
强制删除文件夹和文件 : $ git clean -dfx
检出一个分支上的某一次提交
$ git cherry-pick [commit_hash]
cherry-pick比较好的使用场景是在一个分支上想要另一个分支的单独的某个特性
。这个命令经常会引起冲突,所以需要小心使用。
撤销修改
$ git checkout -- <file>
撤销对工作区修改$ git reset HEAD -- <file>
这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化
暂存
$ git stash
备份当前的工作区的内容,将当前的工作区内容保存到Git栈中$ git stash pop
从Git栈中读取最近一次保存的内容,恢复工作区的相关内容$ git stash list
显示Git栈内的所有备份$ git stash clear
清空Git栈
不保留提交记录,还原到某次提交
$ git reset –-hard [commit_hash]
工作区和暂存区都会恢复到指定的版本
$ git reset -–mixed [commit_hash]
此为默认方式,只保留源码,回退暂存区信息
此时再执行$ git checkout -- .
,就相当于执行了–-hard
模式。
相当于-–mixed
之后那些修改文件还没有纳入版本管理,不想恢复了可以再add
、commit
$ git reset -–soft [commit_hash]
回退到某个版本,只回退了本地仓库的信息,不会恢复暂存区信息。
此时再执行$ git reset HEAD
和git checkout -- .
,就相当于执行了–-hard
模式
相当于-–soft
之后那些修改文件已经纳入版本管理,但是还没有提交到本次仓库,不想恢复了可以直接commit
还原之后,由于本地版本落后于远端分支版本,push 的时候需要加上 -f 参数强制push,强制push有可能会把别的提交也覆盖掉,造成代码丢失,所有不建议用强制push。
可以在本地当前的版本上再建一个分支,推送到远端分支。
恢复产生新的提交
$ git revert [commit_hash]
恢复到某次提交之前的状态,并产生一次新提交,保留原来的提交记录。
当·revert·到的那次提交是合并产生的时候,会·revert·失败,并且提示需要加上一个·-m·参数,因为该提交有两个父提交,只要指定恢复后要保留那个父提交。$ git revert -m 1 [commit_hash]
如果是从其他分支合并到的主干分支,-m 1
即是保留主干分支信息。这样操作也会产生一次新的提交,这时候由于·主干的历史中还保留的有合并之前的历史,所有再合并的时候就无法进行合并了·。
Undoing Merges : https://git-scm.com/blog/2010/03/02/undoing-merges.html
查看丢失的提交记录并还原
$ git reflog
查看你所有的提交记录,包含reset
后丢失的提交
1 | 6517ed3 HEAD@{1}: commit message |
$ git show [commit_hash]
查看提交的内容
$ git merge [commit_hash]
合并其中一次提交
尽管reflog是一种检查丢失提交的方法,大型的库里却不太实用。这个时候,应该用fsck(文件系统检查)命令。
$ git fsck --lost-found
git fsck跟reflog命令相比有一个优点。假设你删除了一个远程分支,然后clone了这个库。用fsck命令你可以找到并且恢复这个删除的远程分支。
设计模式
创建型模式
结构型模式
行为型模式
设计模式的六大原则
开闭原则(Open Close Principle)
开闭原则就是说:对扩展开放、对修改关闭
。
在程序需要进行拓展的时候,不能去修改原有的代码,要实现一个热插拔的效果。
所以一句话概括就是:为了使程序的扩展性好,易于维护和升级
。
想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
里氏代换原则(Liskov Substitution Principle)
里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。
里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现
。
LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。
而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体
。
接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。
还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。
所以上文中多次出现:降低依赖,降低耦合
。
迪米特法则(最少知道原则)(Demeter Principle)
为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立
。
合成复用原则(Composite Reuse Principle)
原则是尽量使用合成/聚合的方式,而不是使用继承
。
Spring Loaded 热部署
在玩 JRebel 的时候发现了 Spring Loaded,相比JRebel来说,Spring Loaded最大的优势就是免费。
而且其挂在spring-projects下面,也算是有个强大的后盾。
解压版MySQL 安装
下载
下载页面: http://dev.mysql.com/downloads/mysql/
下载版本: Windows (x86, 64-bit), ZIP Archive, 5.7.13, 310.0M
具体下载链接: http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13-winx64.zip
Nginx 编译 安装笔记
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
commons-cli 简述
commons-cli 用来处理程序启动时命令行传入的参数。如果你仅仅只有一到两个参数需要处理,那么使用它有点多余,但是,如果你需要从命令行中捕获大多数应用程序的设置参数,那么使用CLI是恰到好处的。