-
git rebase移动commit到另外分支
起因
有两个分支, 一个master, 一个topic.
master上面有commit: A C D
topic上面有commit: A B C D本来是要在master上面提交2个新的commit: X Y , 但提交之后才发现是在topic上面提交的. 现在想把 X Y 两个commit移动到mater上面.
用
git rebase --onto
可以实现这个功能, 模拟一下.模拟脚本
用下面这个脚本模拟一下当前的情况
git init date > 1 git add 1 git commit -m'1' git checkout -b dev date > 2 git add 2 git commit -m'2' git checkout master date > 3 git add 3 git commit -m'3' git checkout dev git merge master -m'merge from master into dev' date > 4 git add 4 git commit -m'4' date > 5 git add 5 git commit -m'5'
脚本执行之后的commit情况
* 2d2e87a - (HEAD -> dev) 5 (2 seconds ago) <childe> * afef668 - 4 (2 seconds ago) <childe> * 472e819 - merge from master into dev (2 seconds ago) <childe> |\ | * ac945fe - (master) 3 (2 seconds ago) <childe> * | 1afa191 - 2 (2 seconds ago) <childe> |/ * 18f563a - 1 (2 seconds ago) <childe>
移动commit
[/private/tmp/1521020400 on dev] % git checkout -b newbranch Switched to a new branch 'newbranch' [/private/tmp/1521020400 on newbranch] % git rebase --onto master 472e819 newbranch First, rewinding head to replay your work on top of it... Applying: 4 Applying: 5 [/private/tmp/1521020400 on newbranch] % git checkout master Switched to branch 'master' [/private/tmp/1521020400 on master] % git merge newbranch Updating ac945fe..33c077f Fast-forward 4 | 1 + 5 | 1 + 2 files changed, 2 insertions(+) create mode 100644 4 create mode 100644 5 [/private/tmp/1521020400 on dev] % git rebase --onto 472e819 dev
-
vmtouch
vmtouch可以方便的控制和诊断文件在系统Cache中的情况
-
使用span query解决elasticsearch中的一种复杂搜索
“传说中的陈老师”(什么鬼??)提了一个需求, 是想利用ES来做一种比较复杂的搜索情况, 我自己测试了一下span query, 看起来是可以满足.
-
自定义内容页面
方便在朋友圈装X.
-
房间内 100 个人,每人有 100 块,每分钟随机给另一个人 1 块,最后这个房间内的财富分布是怎样的?
之前看过一篇文章,
房间内 100 个人,每人有 100 块,每分钟随机给另一个人 1 块,最后这个房间内的财富分布是怎样的?突然想到用js来展示, 更动态和直观, 在线实时的效果, 那就用Highcharts来实现一下.
-
为何没有充分利用CPU的一个小故事
解决问题之后, 了解了负载均衡中一个比较隐蔽的坑(也只是对我这种新手来说是坑)
写完之后发现自己还是没有把事情讲清楚的能力!摔.
-
nginx rewrite
翻一下http://nginx.org/en/docs/http/ngx_http_rewrite_module.html并加一些例子
-
nginx的路径变化
经常搞不清楚nginx的路径变化,特别是在proxy_pass的时候. 看下官方文档了解一下.
http://nginx.org/en/docs/http/ngx_http_core_module.html#location和 http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
-
按顺序但非"完全精度"查找
占个坑先吧.
POST city/_search { "query": { "span_near": { "clauses": [ { "span_term": { "cname": "地" } }, { "span_term": { "cname": "北" } } ], "slop": 10, "in_order": true } } }
-
斗地主
前两天看到一个斗地主残局(斗地主都有残局了..), 如下图. 我便想写个程序算一下结果如何. 记录一下, 锻练一下自己说清楚事情的能力.
想法是用程序模拟两个人对局. 就每人依次出牌. 如果一个人牌打完了, 对手就会要求悔棋. 一直到悔到最后没办法悔了就输了.
每个人都先从最简单的牌开始出,最开始出单张,打到最后发现单张不行,就出对子.
比如说, 农民先出一张3, 打到最后发现没办法赢, 再尝试先出一张4. 打到最后发现单张没办法赢, 就出2张3. 依次继续.
大小顺序我们可以随便定, 我是按这样来的: 单张,一对,三张,三带一,顺子,四带2,普通炸,王炸,Pass
解释一下最后的Pass是什么意思: 竟然想不到简单的例子, 就直接拿上图举例. 农民先出A, 地主小怪. 按顺序的话, 应该是出炸,但最后会发现炸会输,按我们定义好的顺序,接下来就是Pass,也就是说,地主出小怪, 我选择不出牌.其中几个需要仔细斟酌一下的细节:
- 什么时候需要悔牌?
- 一个人的牌出完了, 对手要求悔牌
- A悔牌之后, 发现自己上一轮是Pass, 那只能继续往前悔牌
- 什么时候算赢?
- 农民第一次出牌已经需要Pass了, 说明他输了
- 地主要求农民悔牌的时候, 农民已经是第一张牌, 说明地主输了
- 需要保存/传递哪些信息
- 按顺序记录当前出过的所有牌
- 当前出牌的人
- 当前桌面上的牌是什么 (可以放第1项里面)
- 如果是刚刚悔牌, 需要保存/传递刚悔的是什么牌
- 是不是处于悔牌状态(具体到我的代码实现中, 这个值是需要传递的. 在你的实现中,可以通过第4项直接得到). 这个关系到下一次可以出什么牌. 比如说桌面是444带J, 如果我不是悔牌, 那我的3张必须比4大,单张随意. 如果我是悔牌, 那么三张可以一样, 但单张必须比之前的大.
简单的伪代码:
while True: cureent_player.next if len(paths) == 1 and desktop is Pass: 第一牌就只能Pass,没得打了,判cureent_player输 if destop is Pass and previous_desktop is Pass: //注意这里是需要从Pass往前悔三次牌, 这种回退是一定可以的 rollback(cureent_player,previous_player, cureent_player) if cureent_player.win: if rollback(cureent_player,previous_player) is False: 无牌可悔,cureent_player赢
具体代码见https://github.com/childe/doudizhu
英语太差, 有几个变量名字解释一下:
- Round 是指选手出的一次牌. 比如444带J是一个Round对象. Pass也是一个Round对象
- minimal Two.minimal(cards)本意是指在所有cards里面, 选出最小的对子牌. 这个方法用在对手刚Pass, 而自己悔牌,需要从单张升级到对子的时候. 但可能没有对子,需要继续寻找有没有3张,3带1,顺子等.
就这么多了, 我代码水平太次, 真正实现起来,还是Debug了好久,代码可读性也不是很理想. 另外希望没有打扰到你的思路, 对程序员来说, 递归可能是一种更加自然的思路. 但用Python实现的话,有可能会抛递归层次太深的异常. 毕竟我在i5上面跑了整5分钟, 日志打印了300MB…
- 什么时候需要悔牌?