[Git] 系列三随意修改提交记录以及一些技巧
Author: Xin Pan
Date: 2022.09.17
高级命令总结好了,大概总结好了。90%的常用功能满足了。但是学习要继续!!!
整理提交记录
git cherry-pick <提交号>
,这个命令很简洁也很直观,把<提交号/哈希值>直接复制到了当前HEAD之后作为新的提交。
未知提交号哈希值时怎么办?
git已经想好了,使用交互式rebase即可。
git rebase -i <提交号>
即可,网页这里做的不错。只可意会 不可言传哈哈哈(其实我水平不行)。建议读者去网站看看吧。
一些技巧
本地栈式提交
方法一
我正在解决某个特别棘手的 Bug,为了便于调试而在代码中添加了一些调试命令并向控制台打印了一些信息。最后就差把 bugFix
分支里的工作合并回 main
分支了。你可以选择通过 fast-forward 快速合并到 main
分支上,但这样的话 main
分支就会包含我这些调试语句了。你肯定不想这样,应该还有更好的方式……git rebase 或者git cherry-pick
都可以。
其实很简单。只要rebase
当前分支到之前提交的分支,然后让main fast-forward就可以了。也是通过rebase完成的。
git rebase -i <之前的某个提交>
git rebase HEAD main
# 现在main 和<之前的某个提交> 一样,而且是自己验证过有效的那个提交。
方法二
同样的用git cherry-pick
也可以完成
git switch <之前的某个分支>
git cherry-pick <想要保留个分支>
# 同样的效果
Tag
它们可以(在某种程度上 —— 因为标签可以被删除后重新在另外一个位置创建同名的标签)永久地将某个特定的提交命名为里程碑,然后就可以像分支一样引用了。
更难得的是,它们并不会随着新的提交而移动。你也不能切换到某个标签上面进行修改提交,它就像是提交树上的一个锚点,标识了某个特定的位置。
git tag <tagName> <提交记录>
# 如 git tag v1 fe32(SHA-1为fe32这个提交),为SHA-1为fe32这个提交打上v1标记
Describe
有了tag那如何描述这个tag的意义呢?使用Describe就好啦。
由于标签在代码库中起着“锚点”的作用,Git 还为此专门设计了一个命令用来描述离你最近的锚点(也就是标签),它就是
git describe
!
之后教程提供了几个有意思的作业,叫做高级教程。还是挺有意思的,正好检验下自己的学习结果。