3招搞定!保持清洁的Git提交记录
发布时间 - 2022-02-22 00:00:00 点击率:次本篇文章给大家带来了关于保持清洁的git提交记录的相关知识,其中包括了“git commit –amend”、“git rebase -i”和“rebase”的相关问题,希望对大家有帮助。
推荐学习:《Git教程》
大家都有学习如何规范简洁的 编写代码 ,但却很少学习如何规范简洁的 提交代码 。现在大家基本上都用 Git 作为源码管理的工具,Git 提供了极大的灵活性,我们按照各种 workflow 来提交/合并 code,这种灵活性把控不好,也会带来很多问题
最常见的问题就是乱成一团的 git log history,那真的是老太太的裹脚布, 又臭又长, 个人极其不喜欢这种 log
造成这个问题的根本原因就是随意提交代码。
代码都提交了,那还有什么办法拯救吗?三个锦囊,就可以完美解决了
善用 git commit –amend
这个命令的帮助文档是这样描述的:
--amend amend previous commit
也就是说,它可以帮助我们修改 最后一次提交
既可以修改我们提交的 message,又可以修改我们提交的文件,最后还会替换最后一个 commit-id
我们可能会在某次提交的时候遗漏了某个文件,当我们再次提交就可能会多处一个无用的 commit-id,大家都这样做,git log 慢慢就会乱得无法追踪完整功能了
假设我们有这样一段 log 信息
* 98a75af (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2 * 119f86e feat: [JIRA123] add feature 1.1 * 5dd0ad3 feat: [JIRA123] add feature 1 * c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit
假设我们要修改最后一个 log message,就可以使用下面命令:
git commit --amend -m "feat: [JIRA123] add feature 1.2 and 1.3"
我们再来看一下 log 信息, 可以发现,我们用新的 commit-id 5e354d1 替换了旧的 commit-id 98a75af , 修改了 message,并没有增加节点
* 5e354d1 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2 and 1.3 * 119f86e feat: [JIRA123] add feature 1.1 * 5dd0ad3 feat: [JIRA123] add feature 1 * c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit
现在我们的 repo 中文件是这样的:
. ├── README.md └── feat1.txt 0 directories, 2 files
假设我们提交 feature 1.3 的时候,忘记了一个配置文件 config.yaml , 不想修改 log,不想添加新的 commit-id,那下面的这个命令就非常好用了
echo "feature 1.3 config info" > config.yaml git add . git commit --amend --no-edit
git commit --amend --no-edit 就是灵魂所在了,来看一下当前的 repo 文件:
. ├── README.md ├── config.yaml └── feat1.txt 0 directories, 3 files
再来看一下 git log
* 247572e (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1.2 and 1.3 * 119f86e feat: [JIRA123] add feature 1.1 * 5dd0ad3 feat: [JIRA123] add feature 1 * c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit
知道这个技巧,就可以确保我们的每次提交都包含有效的信息了。一张图描述这个过程就是这个样子了:
有了 --no-edit 的 buff 加成,威力更大一些
善用 git rebase -i
可以看着,上面的 log 都是在开发 feature1,我们在把 feature 分支 merge 到 main 分支之前,还是应该继续合并 log commit 节点的,这就用到了
git rebase -i HEAD~n
其中 n 代表最后几个提交,上面我们针对 feature 1 有三个提
交,所以就可以使用:
git rebase -i HEAD~3
运行后,会显示一个 vim 编辑器,内容如下:
1 pick 5dd0ad3 feat: [JIRA123] add feature 1 2 pick 119f86e feat: [JIRA123] add feature 1.1 3 pick 247572e feat: [JIRA123] add feature 1.2 and 1.3 4 5 # Rebase c69f53d..247572e onto c69f53d (3 commands) 6 # 7 # Commands: 8 # p, pick= use commit 9 # r, reword = use commit, but edit the commit message 10 # e, edit = use commit, but stop for amending 11 # s, squash = use commit, but meld into previous commit 12 # f, fixup = like "squash", but discard this commit's log message 13 # x, exec = run command (the rest of the line) using shell 14 # d, drop = remove commit 15 # l, label
合并 commit-id 最常用的是 squash 和 fixup , 前者包含 commit message,后者不包含,这里使用 fixup, 然后 :wq 退出
1 pick 5dd0ad3 feat: [JIRA123] add feature 1 2 fixup 119f86e feat: [JIRA123] add feature 1.1 3 fixup 247572e feat: [JIRA123] add feature 1.2 and 1.3
我们再来看一下 log, 这就非常清晰了
* 41cd711 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1 * c69f53d (origin/main, origin/feature/JIRA123-amend-test, origin/HEAD, main) Initial commit
善用 rebase
上面的 feature1 已经完整地开发完了,main 分支也有了其他人的更新,再将 feature merge 回 main 分支之前,以防代码有冲突,需要先将 main 分支的内容合并到 feature 中,如果用 merge 命令,就会多处一个 merge 节点,log history 中也会出现拐点,并不是线性的,所以这里我们可以在 feature 分支上使用 rebase 命令
git pull origin main --rebase
pull 命令的背后是自动帮我们做 merge 的,但是这里以 rebase 的形式,再来看一下 log
* d40daa6 (HEAD -> feature/JIRA123-amend-test) feat: [JIRA123] add feature 1 * 446f463 (origin/main, origin/HEAD) Create main.properties * c69f53d (origin/feature/JIRA123-amend-test, main) Initial commit
我们的 feature1 功能 on top of main 的提交节点,还是保持线性,接下来就可以 push 代码,然后提 PR,将你的 feature merge 到 main 分支了
简单描述 merge 和 rebase 的区别就是这样的:
我这里使用 git pull origin main --rebase 省略了切换 main 并拉取最新内容再切回来的过程,一步到位,背后的原理都是上图展示的这样
使用 rebase 是要遵守一个黄金法则的,这个之前有说过,就不再是赘述了
总结
有了这三个锦囊,相信大家的 git log 都无比的清晰,如果你还不知道,完全可以用起来,如果你的组内成员不知道,你完全可以推广起来,这样的 repo 看起来才更健康
推荐学习:《Git教程》
# git
# 再来
# 看一下
# 就可以
# 的是
# 就会
# 也会
# 是这样
# 这就
# 多处
# 都是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
独立制作一个网站多少钱,建立网站需要花多少钱?
如何用VPS主机快速搭建个人网站?
如何快速搭建高效服务器建站系统?
java ZXing生成二维码及条码实例分享
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
如何在香港免费服务器上快速搭建网站?
JavaScript如何实现错误处理_try...catch如何捕获异常?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何用花生壳三步快速搭建专属网站?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
iOS发送验证码倒计时应用
如何快速搭建高效WAP手机网站吸引移动用户?
网站页面设计需要考虑到这些问题
JS碰撞运动实现方法详解
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
千库网官网入口推荐 千库网设计创意平台入口
lovemo网页版地址 lovemo官网手机登录
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
Bootstrap CSS布局之列表
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
如何在云虚拟主机上快速搭建个人网站?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
如何用y主机助手快速搭建网站?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何安全更换建站之星模板并保留数据?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
JavaScript数据类型有哪些_如何准确判断一个变量的类型
企业网站制作这些问题要关注
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何在万网ECS上快速搭建专属网站?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
b2c电商网站制作流程,b2c水平综合的电商平台?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Android使用GridView实现日历的简单功能
如何在七牛云存储上搭建网站并设置自定义域名?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
如何快速完成中国万网建站详细流程?
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
如何确保西部建站助手FTP传输的安全性?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
如何将凡科建站内容保存为本地文件?
在线制作视频的网站有哪些,电脑如何制作视频短片?

