gpt4 book ai didi

Git:两​​个项目,每个项目都在一个仓库中。将子目录中的新 repo 与单一线性历史相结合

转载 作者:太空狗 更新时间:2023-10-29 14:22:59 25 4
gpt4 key购买 nike

我确实有一个 Repo1 和一个 Repo2,分别包含 Project1Project2。每个 repo 都有自己的历史:

Repo1 / Project1
history: A -> C -> G -> L

Repo2 / Project2
history: B -> F -> R

我想创建一个托管 NewProjectNewRepoNewProject 包括 Project1Project2 作为独立的子目录。两个 repo 的历史应该 merge 成一个单一的线性历史。

NewRepo / NewProject
|_ Project1
|_ Project2
history: A -> B -> C -> F -> G -> L -> R

Q 需要 Git HowTo。


我知道下面的答案,但它们没有解决我的问题。

最佳答案

这是一个琐碎的描述,可能会遗漏重要的部分,但也许会引导您朝着正确的方向前进。

首先创建新的仓库(假设仓库在目录结构中的相同位置)

mkdir -P NewRepo/NewProject
cd NewRepo
git init

然后一次添加一个旧存储库

git remote add repo1 ../Repo1
git fetch repo1 # This will add Repo1 including the git history to NewRepo

然后将您的分支移动到 Repo1 中的正确位置。假设你在 Repo1 的顶部有一个 master 分支,你可以

git reset --hard repo1/master

git checkout repo1/master

现在您可以将文件移动到正确的目录。添加并提交。

mv Project1 NewProject
git add NewProject
git commit -m 'Moved Project1 to NewProject'

然后Repo2也是一样的步骤。

在这里您可能想要删除远程存储库。

git remote remove repo1
git remote remove repo2

历史应该不是什么大问题。 gitk --all 将以正确的方式向您显示历史记录。如果您想更改顺序,您可以随时使用 git rebase -i

git rebase -i <oldest commit to handle>

这将启动您最喜欢的编辑器并列出所有提交。在这里您可以重新排列它们的顺序。当您保存并退出编辑器时,git 将从您所在的位置应用您的更改。那是;旧的历史将继续存在。

如果您真的非常想更改历史记录,您还可以使用命令 git filter-branch,但该工具不在我的舒适范围内。

关于Git:两​​个项目,每个项目都在一个仓库中。将子目录中的新 repo 与单一线性历史相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33413148/

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