- My name is Qihang Hu. This is my blog, i will note something here.
- Welcome to leave me messages.
Git 实战:回滚合并提交
之前需求开发分支(dev)已经合到(merge)上线分支(release)后,产品又说不上了要回滚代码,shit。我能想到的是用 git revert 来回滚公共分支(release)的提交,但对 git revert 的使用还停留在 git revert A 上,抓瞎。下面是我实践和验证后的操作记录。 场景还原 提交历史如下所示,dev merge 到 release 上产生了 mrege 提交 M,后面可能还有其他开发者的提交或合并记录(这里的 4 和 5)。 1 ─ ─ ─ ─ ► 2 A ─ ─ ─ ─ ─ ─ ─ ─ ► ► d 3 B ▲ │ e v ─ ─ ─ ─ ─ ─ ─ ─ ► ─ ─ M ▲ │ ┘ ─ ─ ─ ─ ► 4 ─ ─ ─ ─ r ► H e E │ ▼ l │ ▼ 5 A e D a s e 回滚操作 使用 -m 参数回滚 merge 提交,命令: ...
Oh Shit, Git!?! But Lazy.
原文是 Oh Shit, Git!?!,但命令还是太长啦,对它使用 Lazygit 🧑🚀🚀。 用好 Git 很难: 很容易就犯错了,然后想自己弥补犯下的错,简直太难了。查阅 Git 文档简直就像是个 “鸡生蛋 蛋生鸡” 的问题,你得知道你要的是啥 ,但如果我知道的话,我还他妈查个毛文档啊! 所以接下来我会分享一些我遇到过的抓狂的经历,然后用 白话 来说说我是如何解决的。 哎呦我去,我刚才好像犯了个大错,能不能给我台时光机啊!? 在 Reflog 页面你将看到你在 git 上提交的所有改动记录,而且囊括了所有的分支,和已被删除的commit 哦!找到在犯错前的那个提交记录,然后按下 gh,哈哈,这就是你要的时光机! 你可以用这个方法来找回那些你不小心删除的东西、恢复一些你对 repo 改动、恢复一次错误的 merge 操作、或者仅仅想退回到你的项目还能正常工作的那一时刻。我经常使用 reflog,在此我要向那些提案添加这个功能的人们表示感谢,太谢谢他们了! 哎呦我去,我刚提交 commit 就发现还有一个小改动需要添加 继续改动你的文件,按下 a 添加所有文件(或者你可以使用 space 添加指定的文件),然后再按下 shift+a 你这次的改动会被添加进最近一次的 commit 中,警告: 千万别对公共的 commit 做这种操作。 这经常发生在我提交了 commit 以后立马发现,妈蛋,我忘了在某个等号后面加空格了。当然,你也可以提交一个新的 commit 然后利用 rebase -i 命令来合并它们,但我觉得我的这种方式比你快 100 万倍。 警告: 你千万不要在已推送的公共分支上做这个 amend 的操作! 只能在你本地 commit 上做这种修改,否则你会把事情搞砸的! ...
2025
2025-05-24 Root for Your Friends This is a two way street. You can’t expect your friends to root for you if you don’t root for them. Here’s how you can do that: Be quick to praise: Train your first instinct to praise. Be tactfully honest: Good people value constructive criticism deeply. Expand their vision – “That’s awesome… and imagine if you… and have you seen this…?” Signal‑Boost – Shares and like their stuff all the time and ask them to tell you when they post. 朋友飞轮 ...
甜甜圈
之前偶尔刷到 Joma 的视频 why you NEED math for programming:在终端渲染了一个甜甜圈1,当时只是不明觉厉。最近回忆起来,有点好奇就去研究了下。 他所做的事是:以固定视角,在甜甜圈表面绘制大量对应每个点亮度的像素点,让其看起来是立体的。这些像素点是 ASCII 字符:.,-~:;=!*#$@ 依次代表最暗到最亮。 主要步骤如下2: Create a circle of radius R1 centered at R2 Create a donut by rotating about the Y axes Spin the donut around the X and Z axes Project donut onto 2D screen Determine illumination by calculating surface normal (given a light source) 效果图: 首先我们要有一个甜甜圈(也就是环面),其本质上是一个旋转体。我们以 3D 空间中的点为圆心画一个 2D 的圆,然后让圆绕着环面的中心轴旋转就得到了一个旋转体。 这是穿过环面中心的横切面: 在 xy 平面上,点 (x, y) 绕3圆心 $(R_2, 0, 0)$ 旋转一圈,得到一个半径为 $R_1$ 的圆,假设旋转角度为 $\theta$,则圆上每个点的坐标为: ...
力扣第166场周赛
第四题太可惜了,题目读错了以为反转要改变一行一列,其实只要改变相邻的元素(还是菜),第一次离ac这么近,记录一下。 1. 整数的各位积和之差 3分 给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例 1: 输入:n = 234,输出:15 解释: 各位数之积 = 2 3 4 = 24,各位数之和 = 2 + 3 + 4 = 9,结果 = 24 - 9 = 15 示例 2: 输入:n = 4421,输出:21 解释: 各位数之积 = 4 4 2 * 1 = 32,各位数之和 = 4 + 4 + 2 + 1 = 11,结果 = 32 - 11 = 21 提示: 1 <= n <= 105 ...
爬取贴吧图片
一直有在贴吧白嫖漫画的习惯,正好最近又在看Python爬虫,于是无聊就想把每个帖子里的漫画都下载到本地。思路是先分析爬取一页帖子内的漫画图片,然后再分析爬取精品栏内所有帖子的漫画图片。 目标:爬取我的英雄学院百度贴吧精品贴漫画图片 工具:Python Chrome 第一步:爬取当前目标帖子内的所有图片 目标帖子URL:https://tieba.baidu.com/p/5993286218?see_lz=1 开启只看楼主,发现页数不超过一页,所以不用翻页操作,只需爬取当前一页图片即可。打开Chrome开发者工具,观察发现网页原始返回信息中就包含图片链接,所以直接使用requests库GET请求目标帖子URL,再使用PyQuery库解析返回的网页源码即可获取图片链接,然后再下载图片到本地。 使用Chrome开发者工具分析网页源码,可以发现: 帖子所有楼层信息都存在一个class=“p_postlist"的div标签中 每层楼的信息存在class=“l_post"的div标签中 每层楼中图片链接是class=“d_post_content"的div标签中img标签的src属性 分析完源码后开始编写爬虫代码: 定义get_one_page(url)方法,使用requests库获取当前目标页面的网页源码(try-except防止网页请求错误,导致程序终止) import requests from requests.exceptions import RequestException def get_one_page(url): try: url = url response = requests.get(url) return response.text except RequestException: print('第'+page_number+'页,网页请求失败') 定义parse_one_page(html)方法,使用pyquery库解析当前网页源码。根据上面的分析,使用css选择器**’#pb_content .p_postlist .l_post .BDE_Image’**获取全部img标签,并返回img标签的生成器(方便后面循环调用) from pyquery import PyQuery as pq def parse_one_page(html): doc = pq(html) images = doc('#pb_content .p_postlist .l_post .BDE_Image').items() return images 定义get_title(html)方法,同样使用pyquery库获取当前帖子标题,方便后续把每个帖子的图片存入名称为帖子名的文件夹中 from pyquery import PyQuery as pq def get_title(html): doc = pq(html) title = doc('#j_core_title_wrap > h3').text() return title 定义download_images_to_folder(images,html)方法,使用获取的图片链接下载图片到名称为帖子名的文件夹中。首先获取帖子名称建立文件夹,再循环遍历parse_one_page(html)方法返回的生成器,获取每个img标签的src属性,并下载该图片到文件夹中,图片名按顺序为1-n import requests from requests.exceptions import RequestException from pyquery import PyQuery as pq import os def download_images_to_folder(images,html): title = get_title(html) if not os.path.exists(title): os.mkdir(title) try: i = 1 for image in images: response = requests.get(image.attr.src) image_path = '{0}/{1}.jpg'.format(title,i) with open(image_path,'wb') as f: f.write(response.content) print('保存'+title+'第'+str(i)+'张图片成功') i = i + 1 except RequestException: print('保存图片失败') 定义main()方法测试一下,成功获取目标网页图片 ...