git 工具

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模式。

扫描二维码关注公众号,回复: 1793669 查看本文章
$ 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

猜你喜欢

转载自blog.csdn.net/qq_27623337/article/details/79298829