当前位置: 首页 > 后端技术 > Java

猿负责维护干净的Git提交记录,给你三个小技巧

时间:2023-04-01 21:08:04 Java

背景每个人都学会了如何规范简洁地编写代码,却很少学会如何规范简洁地提交代码。现在大家基本都是把Git当做源码管理的工具。Git提供了极大的灵活性。我们根据各种工作流程提交/合并代码。这种灵活性不好控制,也会带来很多问题。最常见最大的问题就是乱七八糟的git日志历史,真是老太太的裹脚布,又臭又长,个人不是很喜欢这种日志。这个问题的根本原因是随机提交代码。代码已经提交了,请问有什么方法可以保存吗?三个小窍门,可以完美解决问题。好好利用gitcommit--amend命令的帮助文档如下:--amendamendamendpreviouscommit也就是说可以帮我们修改最后一次提交或者修改我们的commitmessage,可以修改我们提交的文件,最后替换掉最后的commit-id。我们可能会在某个提交中遗漏一个文件。当我们再次提交时,可能会多出一个无用的commit-id,大家都这样做,git日志就会逐渐变得混乱,无法追踪到完整的功能。假设我们有这么一条日志信息*98a75af(HEAD->feature/JIRA123-amend-test)feat:[JIRA123]addfeature1.2*119f86efeat:[JIRA123]addfeature1.1*5dd0ad3feat:[JIRA123]addfeature1*c69f53d(origin/main,origin/feature/JIRA123-amend-test,origin/HEAD,main)Initialcommit假设我们要修改最后一条日志信息,可以使用如下命令:gitcommit--amend-m"feat:[JIRA123]addfeature1.2and1.3"我们再看一下日志信息,可以发现我们用新的commit-id5e354d1-id98a75af替换了旧的commit,修改了message,没有添加node*5e354d1(HEAD->feature/JIRA123-amend-test)feat:[JIRA123]添加功能1.2和1.3*119f86efeat:[JIRA123]添加功能1.1*5dd0ad3feat:[JIRA123]添加功能1*c69f53d(origin/main,origin/feature/JIRA123-amend-test,origin/HEAD,米ain)Initialcommit我们仓库中的文件现在看起来是这样的:.├──README.md└──feat1.txt0目录,2个文件假设我们在提交功能1.3时忘记了配置文件config.yaml,并且我们没有不想修改日志,如果不想添加新的commit-id,下面的命令很有用echo"feature1.3configinfo">config.yamlgitadd.gitcommit--amend--no-editgitcommit--amend--no-edit是灵魂所在,我们来看一下当前的repo文件:.├──README.md├──config.yaml└──feat1.txt0目录,3个文件我们拿看看gitlog*247572e(HEAD->feature/JIRA123-amend-test)feat:[JIRA123]addfeature1.2and1.3*119f86efeat:[JIRA123]addfeature1.1*5dd0ad3feat:[JIRA123]addfeature1*c69f53d(origin/main,origin/feature/JIRA123-amend-test,origin/HEAD,main)Initialcommit知道了这个技巧,我们可以确保我们的每个提交都包含有效信息一张图是这样描述这个过程的:有了--no-edit的buff加成,更强大了,用gitrebase-i可以看到。上面的日志都是开发feature1,而我们在把feature分支合并到主分支之前,应该继续合并日志commit节点。这使用gitrebase-iHEAD~n其中n代表最后几次提交。上面的feature1我们有3个commit,所以我们可以使用:git运行rebase-iHEAD~3后,会出现一个vim编辑器,内容如下:1pick5dd0ad3feat:[JIRA123]addfeature12pick119f86efeat:[JIRA123]addfeature1.13pick247572efeat:[JIRA123]addfeature1.2and1.345#Rebasec69f53d..247572eontoc69f53d(3commands)6#7#Commands:8#p,pick<提交>=usecommit9#r,reword=使用commit,但编辑提交消息10#e,edit=使用commit,但停止修改11#s,squash=使用commit,但合并到previouscommit12#f,fixup=like"squash",但丢弃这次提交的日志信息13#x,exec=runcommand(therestoftheline)usingshell14#d,drop=删除提交15#l,标签