【问题标题】:Merging two git repositories from some specific commit合并来自某个特定提交的两个 git 存储库
【发布时间】:2015-09-16 21:57:12
【问题描述】:
我必须在存储库之间进行合并。我在项目 A 中与一些人一起工作。
一旦我们完成了项目 A,我们就开始了项目 B。
项目 B 有项目 A 作为基础,所以我们克隆了 A 删除了 git 文件并开始使用这些文件(我真的不知道我们为什么这样做,有很多更好的方法可以做到这一点)
所以现在我有项目 A 及其所有提交和项目 B 初始提交包括整个 A 和我们在 B 中工作的那些
是否有可能将提交从存储库 B 移动到存储库 A? (不包括第一个项目A)
【问题讨论】:
标签:
git
github
merge
git-merge
【解决方案1】:
代表 A:
a1 --- a2
代表 B:
b1 --- b2
这里的问题是 a2 和 b1 虽然它们的内容相同,但由于它们的祖先不同,所以它们不是同一个提交。
这是我制作的非常简单的示例,从另一个 repo 获取分支。 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 可视化 repo,您会看到历史记录已断开连接。
从那里您可以将b_branch 重新设置为master:
git checkout b_branch
git rebase master
在b_branch 的第一次提交(不在master 中)时,您可能会遇到冲突,但在那之后您应该会很好。手动解决冲突,git add 有问题的文件,然后git rebase --continue。