We need to generate a TFS repository from a Git source code base, we would like to preserve the original commit history, so I tried to use Tf-Git "git tf checkin --deep" command that is supposed to create a TFS changeset for each Git commit.
Unfortunately this step fails because a lot of commits in the Git repo have two parents due to merges, and TFS requires commit history to be linear to be able to import it. So I am getting the following error:
git-tf: cannot check in - commit 2b15822 has multiple parents, please rebase to form a linear history or use --shallow or --autosquash
This is understandable. But what can be done about it if the existing Git repo has a long chain of such commits? I know it's possible to spend a day or two revising commit history manually, but that's not what we want to spend our days on. Do I understand correctly that there is no automated way of fixing commit history to become linear, so unless we want to spend many hours on manual work, we should just import the whole history as a single changeset?
A rebase should actually solve this for you.
git rebase -i <hash of commit before first branch has been created>
In the window that pops up when you execute that command, don't change anything. Simply save and close.
An illustration:
A <- B <- E <-----F <- G master
^ ^
\ /
- C <- D - branch
Commits C
and D
were on a branch and have been merged into master with the merge commit F
.
Now, executing git rebase -i B
will yield the following result, when executed from master
:
A <- B <- C <- D <- E <- G master
Please note that the merge commit F
disappeared, because it would be empty.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With