我有一个git存储库(称为此存储库A),用于接近公开发布的项目。随着时间的推移,存储库包含了我不想公开的信息(不是密码/ SSH密钥,但认为类似)。在过去的某个时刻(当我以为我们即将发布时),我通过运行git clone --depth=1
创建了一个没有旧历史记录的新存储库(调用此存储库B)。在存储库A上没有发生任何开发,但是在存储库B上继续开发。现在我们实际上接近发布,我的老板想再次执行此操作,以创建存储库C.
我想将存储库A和B连接在一起,以包含一个“遗留”存储库,其中包含从项目开始到存储库C的第一次提交的整个历史记录。存储库A的最后一次提交和第一次提交存储库B具有相同的哈希值。 如何创建新的存储库AB,其中包含项目的整个历史记录,从第一次提交存储库A到最后一次提交存储库B ?
我尝试了以下内容:
fetch
和merge
B/master
添加到A/master
; git只报告Already up-to-date.
,但HEAD
和A/master
仍在最后一次提交回复A. fetch
和merge
B/master
A/master
添加到--allow-unrelated-histories
,git仅在我使用{{1}时允许}。这只会产生一个巨大的合并冲突,自回购B开始以来,每个文件都被修改为冲突。我想如果我可以解决所有有利于回购B的冲突,这将是一个可接受的解决方案,但我不确定在这次合并之后历史树会是什么样子。 有没有更好的方法来做我想要完成的事情?
答案 0 :(得分:0)
要将repo A
和repo B
与连续历史记录一起加入,您可以使用以下命令:
git clone <URL for repo A>
cd A
git remote add B <URL for repo B> -f
git reset --hard B/master
在本地仓库中,本地master
分支包含所有顺序历史记录。如果要将本地仓库推送到仓库C
,可以使用以下命令:
git remote set-url origin <URL for repo C>
git push -u origin master
答案 1 :(得分:0)
如果历史是字面顺序的,并且回购B是作为回购A(git clone --shallow <url of repo A>
)的浅层克隆而制作的,那么你所要做的就是不浅薄的回复B:
$ cd path/to/repo/B
$ git fetch --unshallow origin
使B成为一个完整的(不再浅的)存储库,其中包含A中的所有提交,以及对B进行的任何其他提交。
另一方面,你谈到将回购A添加为回购B的远程 - 但是如果你用git clone --shallow
做回购B,A应该已经一个遥控器。因此,您的问题描述中缺少某些内容。