Gitlab 在处理提交的 Merge Requests 时,默认情况下是使用正常的merge后在提交一次,相当于git merge --no-ff
但如果要合并的分支 commit 记录比较多的话会使得 master 分支的log 版本会非常多,使用 git log 做追溯的时候比较难抓住重点。
期望master分支内只展示提交 Merge Request 时的描述内容,将全部的 commit 合并成为一条记录,相当于git merge --squash && git commit
经过各种试验,最终发现gitlab merge 时使用的方法是(根据版本路径可能会稍有不同,我这使用的版本是 GitLab Community Edition 10.7.3
)
找到下面这个文件
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/git/repository.rb
将 rugged_merge 内 option 的配置做如下修改
parents: [our_commit, their_commit] 去掉 their_commit
修改后即为
options = {
#parents: [our_commit, their_commit],
parents: [our_commit],
tree: merge_index.write_tree(rugged),
message: message,
author: committer,
committer: committer
}
修改完毕之后记得重启gitlab gitlab-ctl restart
下面就可以测试效果了
比如新建一个分支,并在该分支内提交多次commit。
然后在gitlab上提交如下的 Merge Request
屏幕快照 2018-11-02 上午12.58.23.png
merge 成功后,在master分支使用 git log
查询,最新的一次 commit 记录展示为在master上展示的内容