【Day22】Git 版本控制 - 修改 commit 纪录:rebase

commit 版本的时候可以写下一些讯息,以便他人或未来自己查看的时候可以快速理解。但是,有时候写程序写到疲乏,撰写出来的 commit message 可能就会变成火星文,连自己都看不懂,那有办法改 commit message 吗?

当然有!而且有四种办法:

  1. 把 .git 目录整个删除,暴力破解法,请不要轻易尝试谢谢。
  2. 使用 git rebase 来修改历史。
  3. 先把 Commit 用 git reset 拆掉,整理後再重新 Commit。
  4. 使用 --amend 参数来修改最後一次的 Commit。

那麽就来先介绍第 2 种办法吧!第一种就不用介绍了吧:)

git rebase

rebase 可以拆成 re + base,翻成中文大概就是「重新定义 branch 的参考基准」,而 base 指的就是「branch 是怎麽诞生的」,所以 git rebase 这个指令基本上就是在修改历史,当你在做 rebase 时还会看到这个警告 Make sure your changes have not been pushed to anyone else,因为有可能会造成他人的困扰。

接下来还是讲一下他的作业机制,以下图片与内容取至 另一种合并方式(使用 rebase),原文中的举例是使用三个 branch,分别是 master、dog、cat,而现在的 head 位置是在 cat 身上

假设使用以下指令:

git rebase dog

他的意思是把 cat 分支改建立到 dog 分支上,有点像剪下贴上的感觉,原文中也有对下图做更详细的解释,如下:

「我先拿 c68537 这个 Commit 接到 053fb2 这个 Commit 上」,因为 c68537 原本的上一层 Commit 是 e12d8e,现在要接到 053fb2 上,所以需要重新计算这个 Commit 的 SHA-1 值,重新做出一颗新的 Commit 物件 35bc96。
「我再拿 b174a5 这个 Commit 接到刚刚那个新做出来的 Commit 物件 35bc96 上」,同理,因为 b174a5 这颗 Commit 要接到新的 Commit 的原因,所以它也会重新计算 SHA-1 值,得到一个新的 Commit 物件 28a76d。
最後,原本的 cat 是指向 b174a5 这个 Commit,现在要改指向最後做出来的那颗新的 Commit 物件 28a76d。
HEAD 还是继续指向 cat 分支。

Reference

另一种合并方式(使用 rebase)


<<:  【Day 22】阵列的应用-Bubble sort

>>:  [Day22]DML语句实作

上有政策 - 同源政策

为什麽要有同源政策? 可以先想想没有同源政策会发生什麽事? 当你在看这篇文章时,可以看看你的浏览器开...

不只懂 Vue 语法:後记 - 为自己坚持 30 天的参赛心得

终於完赛了,这篇文章会以个人完赛心得为主,可谓是零技术成分。(撒花~ 我以为完赛都是这样: 最後才没...

day 18 - graceful shutdown 优雅地退场

服务上线之後, 另一个考验才刚开始。 当流量开始进出服务之後, 如果要进行更版, 服务就需要重启或中...

[Day 02] - Mongo DB环境建置

第二天,首先我打算先把Mongo DB环境建起来 为了方便,就用docker在local部属 Mon...

改变的三面向

早起运动Day7 - 关於改变的秘密​ ​ 「他就是这样,很难改变。」​ 这两天在看《内在动机》《被...