修改git repo历史记录变为线性

时间:2013-02-05 09:38:45

标签: git tfs git-tf

我们需要从Git源代码库生成TFS存储库,我们希望保留原始提交历史记录,所以我尝试使用Tf-Git“git tf checkin --deep”命令来创建一个每个Git提交的TFS变更集。

不幸的是,这一步失败了,因为Git repo中的许多提交由于合并而有两个父级,而TFS要求提交历史是线性的,以便能够导入它。所以我收到以下错误:

git-tf: cannot check in - commit 2b15822 has multiple parents, please rebase to form a linear history or use --shallow or --autosquash

这是可以理解的。但是,如果现有的Git仓库拥有一长串此类提交,可以采取哪些措施呢?我知道可以花一两天时间手动修改提交历史记录,但这不是我们想要度过的日子。我是否正确理解没有自动修复提交历史记录以变为线性的方法,因此除非我们想花费很多时间进行手工操作,否则我们应该将整个历史记录导入为单个变更集?

1 个答案:

答案 0 :(得分:6)

rebase实际上应该为你解决这个问题。

git rebase -i <hash of commit before first branch has been created>

在执行该命令时弹出的窗口中,不要更改任何内容。只需保存并关闭。

插图:

A <- B <- E <-----F <- G      master
     ^            ^
      \          /
       - C <- D -             branch

提交CD在一个分支上,并已合并为提交F

现在,从git rebase -i B执行时,执行master将产生以下结果:

A <- B <- C <- D <- E <- G    master

请注意,合并提交F消失了,因为它会为空。