gpt4 book ai didi

git - 如何连接未连接的 git 历史记录?

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

我们的项目中有一段非常奇怪的 git 历史。首先,有另一个项目可能有以下历史:

repo 1:

a---b---c

然后是我们的项目

repo 2:

u---v---w

因为我们在 repo2 的代码中需要 repo1,一个“聪明的”程序员使用 read-tree 将 repo1 的最后一次提交(c)读入 w,所以现在我们有了

u---v---w---w'

其中 w' 有提交 c 而没有它的历史。然后对两个存储库进行了一些更改,导致以下历史记录:

a---b---c---d---e

u---v---w---w'---x---y

现在我们要清理困惑并将 repo1 的更改 merge 到我们的存储库中。然而,当简单地 merge 两个存储库时,我们会遇到大量冲突,因为分支不共享历史记录(实际上它们共享,但 git 不知道),因此 git 无法执行三向 merge 。

那么我们如何进行三向 merge 呢?有没有办法“添加”缺失的历史边缘,即创建这样的东西:

a---b---c---d---e
\
u---v---w--w'---x---y

最佳答案

输入repo2并添加repo1作为远程

git add remote repo1 url_of_repo1

获取repo1的历史

git fetch repo1

现在你的repo2历史应该是

a---b---c---d---e  repo1/master

u---v---w--w' master

如您所见,repo1repo2 的历史仍然不相关,并且没有共同的提交。

现在您可以mergerebase 这两行

merge 你会做

git checkout master
git merge repo1/master

a---b---c---d---e repo1/master
\
u---v---w--w'------x master

使用rebase,你将得到一个线性历史

git checkout -b rebasing repo1/master
git rebase master
git branch -f master
git checkout master
git branch -D rebasing


u---v---w--w'-a---b---c---d---e master

当然,您必须解决冲突。但这只是一次性问题。

为了让您的生活更轻松,在 rebase 或 merge 之前,您还可以使用 w' 提交

git checkout master
git reset master^1

这将在 w 提交上移动你的 master 分支

关于git - 如何连接未连接的 git 历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19378880/

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