时间 | 更新备注 |
---|---|
2018-03-10 | 新建文章 |
2018-06-08 | 整理补充 |
2019-01-18 | 更新链接 |
引言
暂存未跟踪或忽略的文件
默认情况下,git stash会缓存下列文件:
- 添加到暂存区的修改(staged changes)
- Git跟踪的但并未添加到暂存区的修改(unstaged changes)
stash就是存储的意思,比如你在做一件事情的同时,突然又有了别的工作。就把现在的工作存储下来。并不提交到主线任务。而且可以顺利恢复上次的进度。
时间 | 更新备注 |
---|---|
2018-03-10 | 新建文章 |
2018-06-08 | 整理补充 |
2019-01-18 | 更新链接 |
暂存未跟踪或忽略的文件
默认情况下,git stash会缓存下列文件:
stash就是存储的意思,比如你在做一件事情的同时,突然又有了别的工作。就把现在的工作存储下来。并不提交到主线任务。而且可以顺利恢复上次的进度。
时间 | 更新备注 |
---|---|
2018-03-08 | 新建文章 |
2018-06-09 | 整理补充 |
2019-01-18 | 更新链接 |
2020-08-09 | 补充 |
Integrates the changes from the chosen branch
into your working copy. Your current HEAD branch
will be rebased onto the integrated revisions.
1 | git-rebase - Reapply commits on top of another base tip |
即将当前分支的提交放在其他分支的最新的提交后。但是这个reapply
并非简单地将提交剪切复制到,Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
时间 | 更新备注 |
---|---|
2018-03-02 | 新建文章 |
2018-06-10 | 添加和revert&checkout的对比 |
2019-01-18 | 更新链接 |
在提交层面上,reset将一个分支的末端指向另一个提交。这可以用来移除当前分支的一些提交。比如,下面这两条命令让 hotfix 分支向后回退了两个提交。
1 | git checkout hotfix |
时间 | 更新备注 |
---|---|
2018-03-01 | 新建文章 |
2018-06-08 | 整理补充 |
2019-01-18 | 更新链接 |
2020-08-09 | 补充 |
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。
Git
处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。 与许多其它版本控制系统不同, 理解和精通Git
分支,你便会意识到Git
是如此的强大而又独特,并且从此真正改变你的开发方式。
那么,
Git
又是怎么知道当前在哪一个分支上呢? 也很简单,它有一个名为HEAD
的特殊指针。 请注意它和许多其它版本控制系统(如Subversion
或CVS
)里的HEAD
概念完全不同。 在Git
中,它是一个指针,指向当前所在的本地分支(译注:将HEAD
想象为当前分支的别名)。 在本例中,你仍然在master
分支上。 因为git branch
命令仅仅 创建 一个新分支,并不会自动切换到新分支中去。
时间 | 更新备注 |
---|---|
2018-02-28 | 新建文章 |
2018-06-06 | 添加checkout命令 |
2019-01-18 | 更新链接 |
上篇介绍
Git
的流程涉及了很多命令,这篇将对介绍Git
工作流的命令进行梳理,希望增加对Git
的理解,方便大家的使用。
时间 | 更新备注 |
---|---|
2018-02-28 | 新建文章 |
2018-06-08 | 整理补充 |
2019-01-18 | 更新链接 |
时间 | 更新备注 |
---|---|
2018-02-27 | 新建文章 |
2018-06-07 | 整理补充 |
2019-01-18 | 更新链接 |
Git
很多开发团队在使用,但是Git
很多强大的特性不一定都很了解,基于以前的使用以及参考Git
的博客,将用一系列文章介绍Git
, 从原理到常用命令,希望能更好的使用Git
, 提高团队开发效率。
一些
Swift
的学习记录
Swift
不允许类型的隐式转换,如果你需要修改一个变量的类型,请显示转换。1 | let label = "The width is " |
假如将第三句的String
类型去掉,则会报错:
1 | let label = "The width is " |
Runtime
一直被一些开发者津津乐道,它强大的API可以帮助你更好的理解OC的运行时机制,也是项目中不可缺少的“黑魔法”。本篇将结合一些优秀的Runtime
文章,简单介绍Runtime
原理以及其应用。
Runtime
运行时的机制对于C语言,函数的调用在编译的时候会决定调用哪个函数。 在编译阶段,C语言调用未实现的函数就会报错。
对于Objective-C
的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。在编译阶段,Objective-C
可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错。
Objective-C
语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。
这种特性意味着Objective-C
不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C
来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行。这个运行时系统即Objc Runtime
。Objc Runtime
其实是一个Runtime
库,它基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力。