GIT 将分支克隆到另一个目录中的旧提交

GIT clone branch to older commit in another directory

我有同一个项目的 2 个目录,我们称它们为目录 A 和 B。

这两个文件夹是从另一个位置的主 git 存储库克隆而来的,因此它们都是从相同的 git 存储库提交开始的。

现在 A 保留原始代码并修复了一些小错误,并提交了更改,所以 A git 分支看起来像这样:

A: (original)-(bug fix 1) - (bug fix 2) - (bug fix 3)

当 B 时,我决定更改应用程序的外观,但我还没有承诺。所以 B git 分支看起来像这样:

B: (original)

我想做的是合并原始克隆中的这 2 个 git 回购协议,这样我就可以拥有以下内容:

A: (original)-(bug fix 1) - (bug fix 2) - (bug fix 3)--------(merge both)

           \                                                    /
branch B:   \ -----------------(New version look) -------------

Hello I have 2 directories of the same project, let call them directories A and B. These two folder were cloned from a master git repo in another location,

使用

而不是克隆存储库

git worktree

Git worktree 于 2007 年在 git 存储库的 contrib 文件夹下引入,名为 new-workdir。在 git 中,v2.5 被重命名为 worktree

最简单的语法是这样的:

git worktree add <second path>/<branch name>

将在您的计算机上创建另一个文件夹,使您可以同时处理不同的 分支

git worktree 将创建 2 个相互独立的工作文件夹,同时指向同一个存储库。

这将允许您在新工作树上进行任何实验,而不会对存储库本身产生任何影响。在所附的图片中,您可以看到有 2 个单独的 工作文件夹,但它们都使用一个存储库并共享内容。

下面是关于如何创建新工作树及其结果的示例:

What I would like to do is merge these 2 git repos from the original clone so I can have the following...

现在,由于您在同一个存储库上工作,您可以 mergecherry-pick 而无需拉取或推送到遥控器,因为您不需要使用遥控器。
都是本地的!!!

如果你可以推回那个回购,但你不想推 B,你可以:

  • 转到您的本地克隆
  • 将 B 本地克隆添加为远程:

    git remote add repoB ../B
    
  • 获取并合并:

    git fetch repoB
    git checkout A
    git merge repoB/B