git工具
1. 修订版本(Revision)选择
Git 很聪明,它能够通过你提供的前几个字符来识别你想要的那次提交,只要你提供的那部分 SHA-1 不短于四个字符,并且没有歧义——也就是说,当前仓库中只有一个对象以这段 SHA-1 开头。
Git 可以为你的 SHA-1 值生成出简短且唯一的缩写。如果你传递 –abbrev-commit 给git log 命令,输出结果里就会使用简短且唯一的值;它默认使用七个字符来表示,不过必要时为了避免 SHA-1 的歧义,会增加字符数:
$ git log --abbrev-commit --pretty=oneline
869a1f3 (HEAD -> develop) 如果redis中没用路口信息,则从mongo中查询
c7ce499 single
aa5c2a1 (origin/develop) 判定结果持久化
2e4deae 启动脚本添加
cb8fe53 删除推送逻辑
541b0b6 判定逻辑修改
1.1 引用日志
在你工作的同时,Git 在后台会保存一份记录最近几个月你的 HEAD 和分支引用的日志。
你可以使用 git reflog 来查看引用日志:
$ git reflog
869a1f3 (HEAD -> develop) HEAD@{0}: commit: 如果redis中没用路口信息,则从mongo中查询
c7ce499 HEAD@{1}: rebase finished: returning to refs/heads/develop
c7ce499 HEAD@{2}: rebase: single
aa5c2a1 (origin/develop) HEAD@{3}: rebase: checkout origin/develop
509d533 HEAD@{4}: rebase finished: returning to refs/heads/develop
509d533 HEAD@{5}: rebase: single
cb8fe53 HEAD@{6}: rebase: checkout origin/develop
90c758b HEAD@{7}: commit: single
ef7b3dc HEAD@{8}: rebase finished: returning to refs/heads/develop
ef7b3dc HEAD@{9}: rebase: detection for package
d1d4fe7 HEAD@{10}: rebase: checkout origin/develop
d989c47 HEAD@{11}: commit: detection for package
2e5d50b HEAD@{12}: commit: red light develop
0a7b5d1 HEAD@{13}: reset: moving to HEAD~3
git log -g 输出中包含引用日志信息。
$ git log -g
commit 869a1f321ee581e888b57aa877642e70c9cfa6ce (HEAD -> develop)
Reflog: HEAD@{0} (guotengfei <guotengfei@zzvcom.com>)
Reflog message: commit: 如果redis中没用路口信息,则从mongo中查询
Author: guotengfei <guotengfei@zzvcom.com>
Date: Mon Feb 5 17:06:29 2018 +0800
如果redis中没用路口信息,则从mongo中查询
Change-Id: I511ef315d5df72702623dbd28d98c45a83917bb8
日志引用信息只存在于本地——这是一个你在仓库里做过什么的日志
1.2 祖先引用
HEADˆ,意思是HEAD 的父提交。
HEADˆ2,意思是HEAD 的第二父提交。
HEAD~ 和 HEADˆ 是等价的。当你指定数字的时候就明显不一样了。 HEAD~2 是指“第一父提交的第一父提交”,也就是“祖父提交”
1.3 提交范围
双点: 让Git 区分出可从一个分支中获得而不能从另一个分支中获得的提交。 git log master..experiemnt,所有可从experiment分支中获得而不
能从master分支中获得的提交。
git log origin/master..HEAD 查看将把什么推送到远程仓库。
git log refA refB –not refC AB中包含但C中没用的
三点:被两个引用中的一个包含但又不被两者同时包含的分支。
log命令的一个常用参数是–left-right,它会显示每个提交到底处于哪一
侧的分支。
1.4 交互式暂存
运行git add时加上-i或者–interactive选项,Git就进入了一个交互式的shell模式。
$ git add -i
staged unstaged path
1: unchanged +8/-4 manager/red_light.py
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
你可以根据指令做不同的操作,还可以制作暂存补丁。
2. 储藏
git stash“‘储藏”“可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
$ git stash
Saved working directory and index state WIP on develop: cbc1bd5 红灯记录记过更改
git stash list 查看现有储藏
$ git stash list
stash@{0}: WIP on develop: cbc1bd5 红灯记录记过更改
git stash drop 删除储藏
$ git stash drop
Dropped refs/stash@{0} (d4314fe7cb96a17497a2f6f0be89fef777d6b99c)
git stash apply 应用储藏的内容
$ git stash apply
On branch develop
Your branch is up to date with 'origin/develop'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: manager/red_light.py
no changes added to commit (use "git add" and/or "git commit -a")
3. 重写历史
git commit –amend 改变最近一次提交说明,
git rebase增加-i选项来以交互方式地运行rebase。
git rebase -i HEAD~3 重写前3次提交。
你可以交互式的pick、edit、squash提交。
4. 使用git 调试
git blame标注文件,-L选项来限制输出范围。
$ git blame -L 20,50 manager/red_light.py
2e5d50bf (guotengfei 2018-01-30 10:39:10 +0800 20)
2e5d50bf (guotengfei 2018-01-30 10:39:10 +0800 21)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 22) class RedLightManager(Service):
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 23) def __init__(self, server_type):
2e5d50bf (guotengfei 2018-01-30 10:39:10 +0800 24) """
2e5d50bf (guotengfei 2018-01-30 10:39:10 +0800 25) 红灯检测
2e5d50bf (guotengfei 2018-01-30 10:39:10 +0800 26) """
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 27) super(RedLightManager, self).__init__(server_type)
2e5d50bf (guotengfei 2018-01-30 10:39:10 +0800 28)
869a1f32 (guotengfei 2018-02-05 17:06:29 +0800 29) @coroutine
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 30) def estimate(self, notification=None):
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 31) # 获取设备的ID
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 32) device_id = notification['deviceId']
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 33)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 34) # 获取数据
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 35) key = self.get_data_key(device_id)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 36) packet = self.get_data(key)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 37) if not packet:
cbc1bd5e (zhaofei 2018-02-06 09:24:31 +0800 38) result_dao.save_result(device_id, 2, 0, packet)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 39) logger.info('判定数据不完整')
869a1f32 (guotengfei 2018-02-05 17:06:29 +0800 40) raise Return(False)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 41)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 42) packet = json.loads(packet)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 43) area = packet['area']
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 44) points = packet['commandData']
869a1f32 (guotengfei 2018-02-05 17:06:29 +0800 45) intersection = yield self.get_intersection(area['longitude'], area['latitude'])
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 46)
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 47) if not intersection:
541b0b67 (zhaofei 2018-02-03 13:50:15 +0800 48) logger.info('没有红灯信息')
cbc1bd5e (zhaofei 2018-02-06 09:24:31 +0800 49) result_dao.save_result(device_id, 2, 1, packet)
aa5c2a14 (zhaofei 2018-02-05 16:01:17 +0800 50) return