git - 将历史添加到 git 存储库或 merge git 存储库

标签 git merge

每个人对“merge git 存储库”的理解都不一样,所以这是我的例子。我们有一个 TFS 存储库,我们已经在某个时间点检查了源代码并进行了初始 git 提交。然后我们在git中进行正常的开发(分支、 merge 等)。问题是在新的存储库中,我们没有 git 存储库中的历史记录,我们想修复它。因此,我已将整个 TFS 存储库转换为 git 存储库,现在我需要将转换后的 TFS 存储库与当前的 git 存储库 merge 。

从上面的描述中可以明显看出,存储库独立于 git 的观点,但从逻辑的角度来看,它们有一个共同的提交(成为当前 git 存储库的初始提交的提交)。

如何在不丢失任何历史记录的情况下 merge 这些存储库?我可以将转换后的 TFS 存储库作为基础,然后从当前存储库的 master 中挑选更改,但这不会导入在当前存储库中创建的所有分支。

最佳答案

编辑:我之前的回答并没有带来任何好处。 git rebase 并不是要这样做的。 然而,stackoverflow 上已经发生了类似的事情:Merging two git repositories to obtain linear history

你可以试试这个程序:

git init combined
cd combined
git remote add old url:/to/old
git remote add new url:/to/new
git remote update

您将拥有一个新的存储库,其中引用了两个存储库。然后

git reset --hard old/master

这将使主分支指向旧仓库的主分支。 您现在可以从新仓库的主分支中挑选所有提交

git cherry-pick <sha-1 of first commit on new repo>..new/master

我们是这样开始的:master 分支没问题,但是新仓库中的其他分支呢? 好吧,你不再需要你的旧仓库了,所以

git remote rm old

然后,假设您在新存储库中有一个名为“branch1”的分支。

git checkout branch1
git rebase master

这应该会更改 branch1 的历史记录,使其从 master(组合的 master,包含来自导入的 repo 的历史记录)开始,并且应该在没有冲突的情况下进行 rebase 。 检查历史与gitk一致,然后你可以强制推送

git push -f new master
git push -f new branch1

在强制推送之前你必须确保历史是好的,因为这会改变上游的历史(如果需要的话,保留新旧仓库的备份以恢复)

关于git - 将历史添加到 git 存储库或 merge git 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18270041/

相关文章:

Windows 上的 Git : how to get pre-receive hook to run on the server using a file share

macos - brew 安装 git 失败

python - 使用不等式条件从 pandas 数据帧中查找值到另一个数据帧中

python - Pygit2 - merge 没有快进的分支

sorting - 外部归并排序算法

git - 如何使用可恢复的有意义的提交消息进行小更改?

Git Hook - 在我推送到 github 后让服务器 pull

R 中的 rbind() 函数在合并的数据帧中生成 NA

git - 无法选择一个提交到分支(坏对象错误)

git - 如何在 JGit 中获取 "git log --follow <path>"? (检索包括重命名在内的完整历史记录)