背景
- 我们在使用git做代码版本控制的时候,经常把其他分支的代码合并到当前开发的分支。不过有的时候只想把相关功能合并过来,不想把提交的每一次记录都合并到本分支。不知道有没有人有这种需求,本来我个人是不太理解为什么会有这样的需求,直到最近我遇到一个问题需要清理commit记录。而既然git提供了这样的能力相信,虽然小众但是还是应该有使用这个功能的场景。
解决办法
- 举个例子:
分支:dev_br 个人完成了某个功能,包括三次提交
截图中 commit 1 、commit2、commit3 代表这三次提交 - 目标:把dev_br的三次提交开发的功能,合并到dev_br2中,但是不现实这三次提交的commit记录。
- 我找到了两种方法来达到这个目标
方法一
- 使用merge --squash 命令。此命令可以在合并的时候将所有提交记录合并成一个commit记录。 命令如下:
git merge --squash dev_br

- 这样dev_br的功能已经合并到dev_br2中了,但是提交记录只有我自己最近的一个提交 “new commit” 如下图所。

方法二
- 采用手动打补丁的方法合并代码
- 首先从dev_br分支中导出变更代码,查找当前上一次提交的commitid进行比较。将比较的结果导出到文件中,比如下面示例中/tmp/diff.patch
git diff 7ef406a > /tmp/diff.patch
- 接下来在dev_br2分支中把补丁手动导入进去,相关命令
git apply --stat /tmp/diff.path #预览一下改动点
git apply --check /tmp/diff.path #校验一下文件
git apply /tmp/diff.path #应用此补丁
- 结果如下:
* 接下来就按照正常提交就可以了。
最后,希望以上两种方法会给大家工作中带来一些帮助
本文介绍如何在Git中使用merge--squash和手动补丁合并代码,避免显示多次提交记录,以维护清晰的dev_br2分支。两种方法适用于清理commit记录的场景。
1174

被折叠的 条评论
为什么被折叠?



