合并来自某个特定提交的两个 git 个存储库

Merging two git repositories from some specific commit

我必须在存储库之间进行合并。我在项目 A 中与一些人一起工作。

一旦我们完成了项目 A,我们就开始了项目 B。

项目 B 以项目 A 为基础,所以我们克隆 A 删除了 git 文件并开始使用这些文件(我真的不知道为什么我们这样做有很多更好的方法来做到这一点)

所以现在我有项目 A 及其所有提交和项目 B 的初始提交包括整个 A 和我们在 B 中所做的工作

是否有可能将提交从存储库 B 移动到存储库 A? (不包括第一个项目A)

代表 A:

a1 --- a2

代表乙:

b1 --- b2

这里的问题是 a2 和 b1,尽管它们具有相同的内容,但由于它们具有不同的祖先,所以它们不是相同的提交。

这是我做的一个非常简单的例子,从另一个仓库中获取分支。 git 创建一个带有分离分支点的分支:

mkdir a
cd a
echo "a1" > asdf.txt
git init
git add asdf.txt 
git commit -m"a1"
echo asdf2 >> asdf.txt
git commit -am"a2"
cd ..
cp -a a b
cd b
rm -rf .git
git init
git add asdf.txt 
echo b1 >> asdf.txt 
git commit -am"b1"
echo b2 >> asdf.txt
git commit -am"b2"
git log --graph --all --oneline --decorate
cd ../a
git log --graph --all --oneline --decorate
git fetch ../b master:b_branch
git log --graph --all --oneline --decorate

结果:

* 4de3a97 (b_branch) b2
* 34c116e b1
* 4b25afe (HEAD, master) a2
* 7ac42e8 a1

它没有显示在 git log --graph 中,但是如果您在那时使用 gitk --all 可视化回购协议,您会看到历史记录已断开连接。

从那里你可以将 b_branch 变基到 master:

git checkout b_branch
git rebase master

您可能会在 b_branch 的第一次提交(不在 master 中)发生冲突,但在那之后您应该会很好。手动解决冲突,git add 有问题的文件,然后 git rebase --continue.