假设我们有这样一段 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
16 # t, reset
17 # m, merge [-C | -c ]
18 # . create a merge commit using the original merge commit’s
19 # . message (or the oneline, if no original merge commit was
20 # . specified). Use -c to reword the commit message.
21 #
22 # These lines can be re-ordered; they are executed from top to bottom.
23 #
24 # If you remove a line here THAT COMMIT WILL BE LOST.
25 #
26 # However, if you remove everything, the rebase will be aborted.
27 #
28 #
29 # Note that empty commits are commented out
合并 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
如果您正在学习Spring Cloud,推荐一个连载多年还在继续更新的免费教程:https://blog.didispace.com/spring-cloud-learning/
善用 rebase
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
最后
手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友
[外链图片转存中…(img-oXlogT08-1713635651365)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!