You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需切换分支或修改工作区,如何复制Git提交并复用提交信息?

Git提交复制问题解决方案

当前处于foo分支的提交123456上,需要向bar分支添加一个内容与123456完全一致的新提交(不使用变基,仅基于相同快照创建),针对你提出的两个问题,解决方案如下:

问题1:无需离开foo分支或修改工作区的实现方式

可以使用git commit-tree命令直接创建提交,全程无需切换分支或改动工作区。该命令能基于指定的文件快照(树对象)和父提交生成新提交,再通过git update-ref更新bar分支的指向。

具体命令:

git update-ref refs/heads/bar $(git commit-tree 123456^{tree} -p bar)

命令说明:

  • 123456^{tree}:获取提交123456对应的文件快照(树对象)
  • -p bar:指定新提交的父提交为bar分支当前的顶端提交
  • git commit-tree会输出新提交的哈希值,git update-ref则将bar分支直接指向这个新哈希

问题2:自动复制123456提交信息的简洁方法

通过git log提取目标提交的完整信息,再传递给git commit-tree,就能自动复用原提交信息,无需手动复制。

结合问题1的命令,修改后完整命令如下:

git update-ref refs/heads/bar $(git commit-tree 123456^{tree} -p bar -F <(git log --format=%B -n 1 123456))

命令说明:

  • git log --format=%B -n 1 123456:提取123456提交的完整信息(包含标题和正文)
  • <(...):将命令输出作为临时文件传递给-F参数,-F表示从文件读取提交信息
  • 若仅需复用提交标题,可将--format=%B替换为--format=%s

也可以拆分为两步执行,更直观:

# 创建带原提交信息的新提交,获取其哈希值
NEW_COMMIT=$(git commit-tree 123456^{tree} -p bar -F <(git log --format=%B -n 1 123456))
# 更新bar分支指向新提交
git update-ref refs/heads/bar $NEW_COMMIT

内容的提问来源于stack exchange,提问作者joshlf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:48:22