基于C++的HTTP WebServer实现--git相关问题与解决方法

本系列主要记录自己在学习过程的思路、问题、解决方法。最后实现一个高性能的HTTP 服务器,用于学习cpp、网络编程、服务器相关的内容。
系列目录

  1. HTTPServer-动态缓冲区
  2. HTTPServer-Connection类逻辑优化
  3. HTTPServer-核心代码重构(1)
  4. git相关问题与解决方法
  5. Sourcetrail使用说明

这篇文章主要记录在学习使用git管理版本时候的一些常见问题和解决方法,供大家参考。

提交规范

为了让提交记录更清晰可读,在后续提交中使用Angular规范来处理commit message。

type含义说明
feat新功能新增的功能或特性
fix修复 bug修正问题或缺陷
docs文档修改仅修改文档(如 README、注释等)
style代码风格不影响逻辑的更改(空格、缩进、格式化等)
refactor重构代码重构,既不是新功能也不是 bug 修复
perf性能优化提升性能的代码更改
test测试添加或修改测试用例
chore杂项构建过程、依赖管理、CI 配置等不涉及源码修改

常见操作

Git Reset 模式对比

模式HEAD(指针)暂存区(index)工作区(working directory)使用场景
Soft回退到指定 commit不变(保留原来的 add 状态)不变(代码还在)想要撤销提交,但保留改动继续修改或重新提交
Mixed (默认)回退到指定 commit清空暂存区(相当于 git reset不变(代码还在)想要撤销提交和暂存,但保留代码改动
Hard回退到指定 commit清空暂存区清空工作区(代码文件直接恢复成指定 commit 的状态)完全丢弃本地改动,和指定 commit 保持一致

合并相邻提交

希望把几个已经提交到远程小版本合并到一起,例如下图中希望把前三个合并为一个:
几个已提交的
采用交互式变基的方法,在终端中运行:git rebase -i HEAD~5,得到如下内容,表明对前五个commit进行操作,此时是处在vim中的:
在这里插入图片描述
我需要先把第四个(ce088e4)合并到第三个(2deb23c)中,使用vim将pick改为squash,随后wq保存退出。会自动进入到对于commit message的编辑中:在这里插入图片描述
在第一行下方输入合并后的commit message即可,随后保存退出。最后使用git push origin main --force 强制推送到远程即可。

强制使用远程分支

在机器a上对远程进行上述变基操作后,机器b上出现了本地和远程分叉的情况:
在这里插入图片描述

方法一:命令行

终端中输入:

git fetch origin //拉取远程最新的提交,但不修改你本地分支
git reset --hard origin/main //强制把本地 main 移动到和远程 main 一样的位置

方法二:gitlens

使用vsc中的插件gitlens有图形化界面可以操作,抓取远程后找到最新的那个commit:
在这里插入图片描述
右键菜单中选择Reset Current Branch to Commit
在这里插入图片描述
随后会弹出三种提示,选择hard模式,表明抛弃本地分支,选择后自动合并成功:
在这里插入图片描述

重构模块的逐步提交

在重构智能指针资源管理的过程中,我希望实现对于重构模块的逐步提交,最后把所有的重构模块的提交整合到一个commit中合并到主分支

1. 新建一个重构分支

git checkout -b refactor-smartptr

专门在这里做重构。

2. 按模块逐步提交

比如先改 Buffer 模块:

git add src/Buffer.*
git commit -m "refactor: use smart pointers in Buffer"

然后改 Connection 模块:

git add src/MyConnection.*
git commit -m "refactor: manage resources in MyConnection with smart pointers"

保持每个提交 小而明确,方便回退和测试。

3. 整合提交(squash)

当整个重构分支完成后,用交互式 rebase 把多个 commit 压缩成一个:

git rebase -i main

然后在 rebase 编辑器里,把第一个 commit 保留 pick,其余的改成 squash 或 fixup。

最终会得到一个大 commit

4. 合并到主分支

有两种方式:

(1)rebase 合并(历史干净),主分支历史看起来只有一个 commit。

git checkout main
git merge --ff-only refactor-smartptr

(2)squash merge(也只留一个大提交)

git checkout main
git merge --squash refactor-smartptr
git commit -m "refactor: unify smart pointer resource management"

注意:

如果这个分支你一个人开发,推荐 rebase -i squash 压缩再合并。

如果和别人协作,最好用 merge --squash,这样不会改写已经推送过的历史。

更多

会逐步更新

本项目基于开源项目《30daysCppWebServer》进行学习、实现、优化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值