首页 » 信息技术 »

用git rebase -i整理凌乱的commit log

2020年7月23日 / 1次阅读
Git

我写代码有个习惯,每一个独立的修改,都有一个commit,如果一整天都在coding,上午push一次,下午下班在push一次。push是为了在github上保存代码,同时也方便晚上回家继续干。

这样会导致我的commit log很多,有的时候也很乱。如果公司要求master分支必须保持线性的log,并且每个comit都是一个独立的feature,那么你就需要用git rebase -i命令来整理commit log。(git merge前要git rebase master

git rebase -i命令可以给你一个修改commit历史的机会,包括合并commit,删除commit,修改commit的comments等。

我做了一个测试用的git repo,随便搞几个commit:

$ git log --oneline
215ca2b (HEAD -> master) add a2.txt
019d9e7 add a1.txt
b41aacc ad a0.txt

现在有3个commit,当我执行git rebase -i HEAD~2命令的时候:

用git rebase -i整理凌乱的commit log

用git rebase -i整理凌乱的commit log

这是一个git rebase命令将要执行的command序列,即重新执行一遍这些commit,但是在重新执行的过程中,允许做一些修改。比如pick就是保持不变,reword就是修改comments。squash和fixup用来合并commit。drop用来删除commit(删除commit意味着这个commit所有修改都会丢失)。将所有行(除了注释)删除,git rebase安全退出,什么也不做。

HEAD~2的含义是:从HEAD开始去2个commit出来搞事情。我这个测试repo只有3个commit,如果你用HEAD~3就不行,会有错误,第一个commit貌似不允许做rebase。

命令写成这样也可以:git rebase -i b41aacc,对应我的测试repo,b41aacc就是第一个commit的id。

如果你的commit history很长,可以用这个命令格式:git rebase -i [startpoint] [endpoint]

最后,在此编辑界面保存退出,git rebase就开始工作!过程中如果有冲突,git rebase会停下来让你手动解决冲突,然后git add,然后git rebase --continue。冲突解决不了,也可以终止git rebase -abort。

git rebase是个很高级的命令,用好了事半功倍。

本文链接:https://www.maixj.net/ict/git-rebase-i-23845

相关文章

留言区


前一篇:

-->只要几分钟回答问卷,就能轻松赚现金!

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top