将提交插入Git历史记录而不会丢失引用(标记,分支等)

时间:2016-12-05 08:48:31

标签: git git-rewrite-history

我有一个主分支,我希望保留所有历史记录,包括已分叉并合并回主分支的分支,以及标记:

                 (v1.2.3)
                     T
      A--B--C--D--E--F--G--H      (master)
          \      /
           I----J                 (topic/1)

现在,我想将一个不相关的提交X插入主分支中的特定位置(例如在提交A之后),如下所示:

                    (v1.2.3)
                        T
      A--X--B'-C'-D'-E'-F'-G'-H'  (master)
             \      /
              I'--J'              (topic/1)

我认为我想做的事情是filter-branch和cherry-pick的组合,类似于this answer中最后建议的方法。

我该怎么做?

注意:我知道提交X不会引入任何冲突。此外,我想将此解决方案扩展为多个提交(我目前有一个脚本,在主服务器上给定SHA,知道在主提交后需要插入哪些提交)。

1 个答案:

答案 0 :(得分:0)

你可以通过检查A,执行提交X,然后在保留合并的同时将master重新绑定到X来实现。

  • git checkout A
  • ...编辑,添加和提交X ...
  • git checkout master
  • git rebase -p X

不幸的是,这不会保留标签。有办法解决这个问题,但是从你对帖子的评论中可以找到解决潜在问题的更好方法。