Git 在历史提交记录中插入新提交

2024/05/28 Tools
知识共享许可协议

git

需求

# 原始的 Commit Log
AA-BB-CC-DD		(master)

# 预想的变更后 Commit Log
AA-BB-VV-CC-DD	(master)

操作

$ git checkout master
# 检出以插入点的上一次提交,即 BB 的代码创建临时分支 tmp
$ git checkout -b tmp BB
# 将变更添加到本地暂存
$ git add -A
# 提交记录 VV

现在流程分支结构类似:

AA-BB-VV	(tmp)
    \
     CC-DD	(master)

在当前 tmp 分支执行 rebase 命令:

$ git status
  位于分支 tmp
  无文件要提交,干净的工作区

# 执行完成后,将把当前 tmp 分支 VV 后接上 master CC-DD,并将其当做更新后的 master
$ git rebase tmp master
  成功变基并更新 refs/heads/master。

副作用

VV 之后接的 Commit Log 的 SHA 被更新,在原 SHA 上的 tag 标签未能同步到新的 SHA 上。

解决办法是获得原由 原标签名称提交日期时间,手动映射到相同日期时间的新 SHA 上。

# 在当前更新后的 master 流
$ git status
  位于分支 tmp
  无文件要提交,干净的工作区
  
# 查看历史标签列表
$ git tag -l

# 获得每个标签的详细信息,名称、日期时间(重要)
$ git show TAG_NAME
commit 5dfab871d402931467d639dd8e217ef238705cf6 (tag: TAG_NAME)
Author: Reion <reion78@gmail.com>
Date:   Tue May 28 20:15:28 2024 +0800

# 查看相应日期时间对应的新 SHA 值,此处为:eb1a65e37632539a7000d8e5bf3f9e25bf16f202
$ git log
commit eb1a65e37632539a7000d8e5bf3f9e25bf16f202
Author: Reion <reion78@gmail.com>
Date:   Tue May 28 20:15:28 2024 +0800

# 将原标签名打在此 eb1a65e37632539a7000d8e5bf3f9e25bf16f202 上
$ git tag --force TAG_NAME eb1a65e37632539a7000d8e5bf3f9e25bf16f202

知识共享许可协议

Search

    mail github location contact

    Table of Contents