1.背景
在接到一个需求之后,首先做的是git clone一份完整的代码下来.我个人的习惯是一个大的任务分成多个小任务,分次提交到local git server,全部完成了再整理log成1笔或者2笔,再push上去.
2.用到的命令
> git rebase -i //选择一次commit ,并rebase在它上面
> git commit --amend //修改上一次提交的log
3.过程
1.假设目前的local commit 的情况是下面这样的:
> git log --oneline
可以看到:
d23f4fd modify contents
f851b83 modify contents
89b49e2 add up test files
fb3cb18 first commit
2.现在开发已经完成完成了,需要整理本地的commit,我想把最近的3笔commit都合并到fb3cb18里面去.就要把不变的
那笔commit ID 输进去.
> git rebase -i fb3cb18
接着git就会提示:
pick 89b49e2 add up test files
pick f851b83 modify contents
pick d23f4fd modify contents
然后下面还跟着一堆使用说明:
# Rebase fb3cb18..d23f4fd onto fb3cb18 (3 command(s))
//说明把上面的4次commit重新基于(rebase) fb3cb18进行提交.我们只要把上面
的pick换成squash(压缩),就能够合并这几笔commit了.
修改后的内容如下:
squash 89b49e2 add up test files
squash f851b83 modify contents
squash d23f4fd modify contents
保存并退出.
3. > git log --oneline 可以看到:
fb3cb18 first commit
只剩这一笔commit了,但是很明显这个log讯息不是我想要的.我需要再修改一下这个log.
4. > git commit --amend
我重新输入我想提交的讯息: implement XXX function. 保存并退出
> git log --oneline 可以看到:
1fb6d6a implement XXX function
说明log 已经整理完毕了,在提交之前和server做一次同步的动作,就可以git push 啦!