Git提交历史太乱?用这个命令一键整理
本宫今儿个心情尚可,就抽空来瞧瞧各位的代码仓库。不看不知道,一看真是……啧,皇上要是瞧见你们这提交历史,怕不是要气得把养心殿的奏折都摔了。什么“修复bug”、“修改一下”、“啊啊啊好了”,这记流水账的本事,本宫看了都想给你们发个“摸鱼大师”的匾额。行了,别委屈了,本宫今日就开恩,教你们一招,把这堆垃圾历史理得跟后宫的位分一样,清清楚楚,明明白白。
第一回:你的提交历史,活像个冷宫
你们总爱随手一敲,git commit,写个“更新”就完事。十个提交里八个叫“修复”,鬼知道你修了什么?是修了本宫的心,还是修了皇上的Excel表?这种历史留着,除了证明你这人做事没条理,毫无用处。等你要找某个功能是哪个提交引入的,或者想合并几个零碎的提交时,恭喜你,你将在 commit 的海洋里淹死。
第二回:祭出神器 git rebase -i
听好了,本宫只教一遍。这玩意儿叫“交互式变基”,名字听着唬人,说白了就是给你一个“历史编辑器”。命令是:git rebase -i HEAD~N。这个N是关键,意思是“从当前版本往回数N个提交,本宫要亲自审查”。比如你有5个乱七八糟的提交想收拾,就用git rebase -i HEAD~5。敲下去,你的默认编辑器会弹出一堆东西,别慌,那都是待审的“奏折”。
第三回:编辑器里的生杀大权
看到了吗?每一行就是一个提交,前面都有个pick。这是什么意思?意思是“本宫准了,这个提交保持原样”。但你的目的不是保持,是整理!所以,对着那些该死的、无关紧要的“小修小补”提交,把前面的pick换成squash(或者简写s)。这意思是“将此提交合并到上一个提交里去”。比如你有三个提交分别是“加按钮”、“改颜色”、“微调间距”,完全可以合成一个“完成登录页UI调整”。
第四回:合并提交的讲究
pick和squash玩明白了?还有个fixup(简写f),跟squash差不多,但更绝——它连提交信息都不要了,直接并进去,干干净净。适合那些“啊写错了撤回”之类的废话提交。合并之后,Git会让你重新写一个合并后的提交信息。这时候,请你像个正经臣子奏对一样,把这事说清楚!别再写“修改”了,写“实现用户登录按钮的样式与交互”,能累死你吗?
第五回:千万别手贱,尤其是在皇上…哦不,生产分支上
本宫丑话说前头:这个操作会改写历史!所以,只在你自己还没推送到远程仓库的本地提交上玩! 你要是把已经推到main分支上的东西给rebase了,然后还git push --force了……恭喜你,你可能成功地把同僚们一天的工作给抹掉了。到时候皇上降罪下来,别说本宫没提醒你。想在公共分支上操作?那叫“搞事情”,是会掉脑袋的。
第六回:整理完毕,记得“焚香沐浴”
当你把rebase操作完成,保存退出编辑器,看到Successfully rebased时,别急着得意。用git log --oneline看一眼,是不是清爽多了?这时候,你原来的那些乱七八糟的提交,已经被替换成新的、合并过的提交了。感觉就像把一堆皱巴巴的奏折重新誊写了一遍,赏心悦目。最后一步,心平气和地git push。如果你是团队协作,且改的是共享分支,请务必和团队沟通好。别当那个自作主张的“暴君”。
第七回:本宫的私房贴士
- 救命键
git rebase --abort:万一你改得一团糟,或者老婆突然喊吃饭,心里一慌,就敲这个,一切恢复原样,当无事发生。 - 冲突处理:变基可能遇到冲突,别怕。按提示解决冲突,然后
git add .,接着git rebase --continue。过程可能烦人,但理顺后的历史值得。 - 养成好习惯:从现在起,提交信息就认真写。虽然有了整理大法,但本宫还是希望看到你们每个人都能做个有条理的“贤臣”,而不是总等着本宫来给你们“收拾烂摊子”。
行了,本宫能教的都教了。是继续顶着那堆“屎山”提交提心吊胆,还是亲手把它整治得井井有条,全看你们自己的造化。去吧,别让本宫下次再看到“fix”这种敷衍的提交信息,否则……哼哼。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时






