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

Vag*_*lov 2 git tfs git-tf

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

不幸的是,这一步失败了,因为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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*rth 7

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

git rebase -i <hash of commit before first branch has been created>
Run Code Online (Sandbox Code Playgroud)

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

举例说明:

A <- B <- E <-----F <- G      master
     ^            ^
      \          /
       - C <- D -             branch
Run Code Online (Sandbox Code Playgroud)

提交C并且D在分支上并且已经通过合并提交合并到master中F.

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

A <- B <- C <- D <- E <- G    master
Run Code Online (Sandbox Code Playgroud)

请注意,合并提交已F消失,因为它将为空.