gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:03:00 25 4
gpt4 key购买 nike

每个人对“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com