git rebase, 让提交记录变干净的利器。

本文介绍了如何使用git rebase命令合并多个提交,以清理和美化提交历史。通过示例详细讲解了rebase过程,包括冲突的解决方法,帮助开发者更好地管理git提交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题引入

组里的工程项目使用git做版本管理。开发者一多,git的提交记录中出现了很多自动生成的commit.
类似于如下这种形式:

    Merge branch 'dev' of ssh://XXX.XXX.XXX.XXX/~/Projects/Project_XXX into dev

这种提交记录是由于分支合并时没有人工编写新的合并记录。
此外,在整个版本树中还有很多无意义的临时提交。在推送给服务器之前应该把这些提交合并成有意义的形式。

例如 下面这种提交历史:

$ git log
aaaaa  继续修补BUG1
bbbbb  修补BUG1,发给测试组测试一下
ccccc  发现BUG1

应该直接合并成一个提交

ddddd 发现BUG1并进行了修改,测试通过

问题解决

为了将git历史上的多个commit进行合并, 我们需要用到的命令是git rebase, 针对上面的例子,类似的命令应该为。

    git rebase -i HEAD~3

3就是你要合并的commit数目。
一般情况下, git会停下来,显示一个文本文件。要求你选择哪一个提交要被pick, 哪一个提交要被squash.

  • squash的意思就是这个提交会被合并,然后压缩成新的提交。
  • pick就是你要留下的那个提交。

简单的说,如果我有三个提交
aaaaa [pick]
bbbbb [squash]
ccccc [squash]

显然应该将最早的提交置为pick, 其余的是squash. 这里有一个例子。
rebase 命令执行后显示的样子:

pick f392171 Added new feature X
pick ba9dd9a Added new elements to page design
pick df71a27 Updated CSS for new elements

我们把它修改成:

pick f392171 Added new feature X
squash ba9dd9a Added new elements to page design
squash df71a27 Updated CSS for new elements

这个例子来自:Ariejan de Vroom [http://ariejan.net/2011/07/05/git-squash-your-latests-commits-into-one/]

然后执行合并。 需要注意的是,如果你曾经把这些commit提交到远端的git服务器上。 下次你Push之前要先在远端用

    git reset --HARD commit_id

将远端的版本重置,否则Push会失败,并且恢复起来十分的麻烦。
好吧,我承认,我之所以会写出上面这一段,是因为我自己就这么干了。而且在我提交之后,其他同学还在我的版本上面做了其他修改。 现在要修改起来十分的麻烦。
下面我们就看一下怎么解决。

冲突解决

如果出现冲突, git会停下来。要求我们手动解决。
假设我们编辑了一个文本文件:

”#a.txt
ColdZoo is an idiot

当冲突发生时, git可能会把这个文件改成下面这个样子

” #a.txt
“<<<<<<< aaaaa
ColdZoo is an idiot
“======= bbbbb
ColdZoo is an idiot, he messed up the whole commit history.
“>>>>>>>>

为了解决冲突,我们需要打开VI, 选择我们需要的部分。修改,保存。

运行

    $git add a.txt

告诉git,我们已经解决了这个文件的冲突。
然后运行

    $git rebase --continue

继续rebase. 需要注意的是, git rebase每次对两个提交进行合并操作. 因此,上面解决冲突的工作可能需要重复多次。建议大家每解决一次冲突都暂存一下。

好了,写到这里关于git 提交记录美化的内容就完成了。 主要参考资料:
[1] Ariejan de Vroom的主页 [http://ariejan.net/2011/07/05/git-squash-your-latests-commits-into-one/]

小广告

平时做的小项目整合起来放进GITHUB了。取了一个自以为很萌的名字 yolo-bear. 欢迎大家送星星。
自以为很漂亮的 GitHUB Pages:
http://coldzoo.github.io/yolo-bear/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值