git merge 本身不生成日志,需配合 git log 提取合并引入的提交;git merge --log 仅将摘要写入 commit message,非终端输出;推荐用 git log head@{1}..head --oneline 获取本次合并新增变更。

git merge 本身不生成日志,得靠 git log 配合
Git 的 git merge 命令只做合并,不自动生成更新日志。所谓“一行命令生成日志”,本质是合并后立刻用 git log 提取本次合并引入的提交列表。很多人误以为 git merge --log 能输出日志内容——其实它只是把合并前的提交摘要写进合并提交的 commit message 里,不是终端输出。
-
git merge --log会在 merge commit 的 message 中自动附加最多 10 条被合并分支的提交摘要(可配-m或--log=n改数量),但你得用git show或git log -1才能看到 - 真正想在终端直接看到本次合并新增了哪些变更,得用
git log查范围:比如git log HEAD^..HEAD --oneline(仅显示刚合并进来的提交) - 如果目标分支已有多个提交,
HEAD^可能不够准——更稳妥的是先记下合并前的HEAD,或用git merge-base算共同祖先
安全合并 + 日志输出的一行命令(推荐)
下面这条命令能完成:拉取远端、合并指定分支、并立即打印本次合并引入的所有提交简报:
git fetch origin main && git merge --no-edit origin/main && git log HEAD@{1}..HEAD --oneline
说明:
-
HEAD@{1}是 Git reflog 记录的“合并前的位置”,比硬编码 SHA 或依赖HEAD^更可靠,尤其在本地有未推送提交时 -
--no-edit避免弹出编辑器,适合自动化场景;若需自定义 merge message,去掉该参数 -
--oneline输出紧凑格式;加--pretty=format:"%h %s (%an)"可定制字段 - 注意:该命令默认假设你在当前分支上合并
origin/main,如需合并其他分支(如feature/login),把origin/main换成对应 ref
生成带链接和分类的 changelog(需额外工具)
纯 Git 命令做不到语义化分类(如 “feat”、“fix”)、生成 Markdown 链接或关联 issue。真要这类日志,得靠外部工具:
-
conventional-changelog-cli:依赖 commit message 符合 Conventional Commits 规范,运行npx conventional-changelog -p angular -i CHANGELOG.md -s -
git-chglog:配置灵活,支持模板,命令形如git-chglog --next-tag v1.2.0 - GitHub/GitLab 自带的 Releases 页面会自动提取
git tag间的git log,但前提是打了 tag 且没 squash 合并
绕过工具手写脚本也行,但容易漏掉 merge commit 的边界判断——git log A..B 范围必须严格对应合并引入的提交集,否则会混入其他分支的旧提交。
常见翻车点:rebase 后 merge 日志变空
如果你在合并前对目标分支做了 git rebase,HEAD@{1}..HEAD 可能返回空——因为 rebase 重写了历史,reflog 里的“前一个位置”已失效。此时必须用 git merge-base 手动找分叉点:
- 先获取共同祖先:
git merge-base HEAD origin/main - 再查差异:
git log $(git merge-base HEAD origin/main)..HEAD --oneline - 注意:如果 origin/main 已更新,记得先
git fetch,否则merge-base结果不准
这种场景没法压缩成真正“一行”,强行拼接会让命令脆弱且难调试。遇到 rebase,老老实实分两步更稳。











