在开发一个功能或者修复一个bug时,有时会commit多次代码,这时为了commit历史的完美,会想将多个commit合并为一个,想要实现这个目标,就需要用到
git rebase
,下面记录操作方法,留作笔记。
浏览commit
在合并commit之前,需要先查看commit历史,确定我们需要合并的commit范围。
最通用的方法是
git log
。
示例:(上下箭头或者滑动可以控制内容滚动)
xwd@xwd-OptiPlex-7060:~/projects/ai/ai-tiger$ git log
commit 047a3c26864eb204779a231fe49bcda9d260ef62 (HEAD ->1.3.2, origin/1.3.2)
Author: xingweidong <[email protected]>
Date: Fri Jun 17 09:17:41 2022 +0800
commit 5
commit b23f0d7558be752f8f82aa738d4ccd3574f83ade
Author: xingweidong <[email protected]>
Date: Fri Jun 17 09:17:18 2022 +0800
commit 4
commit fbd6ad0e6b05d47e9bbe08c43ca7cfda019ec4b6
Author: xingweidong <[email protected]>
Date: Fri Jun 17 09:17:05 2022 +0800
commit 3
commit a1f7193e4dd642abe748f4b6a65962e95125015b
Author: xingweidong <[email protected]>
Date: Fri Jun 17 09:16:21 2022 +0800
commit 2
commit b92721896dd1667af7c158936c6c9fe0979a45aa
Author: xingweidong <[email protected]>
Date: Fri Jun 17 09:16:08 2022 +0800
commit 1
commit b76386ba5adcbe7db5fff14c8bd9b4a9945c881c (origin/master, origin/HEAD)
如果使用gitlab,按照下图步骤查看commit历史:
如果使用github,按照下图步骤查看commit历史:
合并commit
这里以上面的commit 1~5 为例,进行说明。
示例操作系统为Ubuntu,如果使用macos,编辑操作同vi,windows系统类似。
例如现在要合并commit 3~5,使用命令:
git rebase -i a1f7193e
-i
代表交互式操作,
a1f7193e
是commit2的id,一般取前7位或者更多即可。
输出如下:
从图中可以看到,最上面是我们的commit,按照提交先后,从上到下排列。
图中有一些命令,这里我们只需要关注:
- pick:使用提交
- squash:使用提交,但融合到前一个提交
只看说明,可能不容易理解,继续看操作,接下来就好理解了。
上图可以直接编辑,将上图修改成下图:
这里把commit4和commit5前面的
pick
修改成了
s
(
squash
的简写),按
Ctrl + X
,出现提示:
输入
y
,出现提示:
按回车键,出现提示:
到这一步,可以修改提交说明,比如修改成:
按
Ctrl + X
,出现提示:
按
y
,出现提示:
按会车键,结束,回到终端命令行:
然后提交到远程仓库,执行命令:
git push -f
-f 表示强制,受保护的分支不可以强制push。
查看远程仓库,多个commit合并为一个了:
版权归原作者 邢为栋 所有, 如有侵权,请联系我们删除。