【问题标题】: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

【讨论】:

    猜你喜欢
    • 2010-09-30
    • 2017-06-30
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多