将快照用作上游

时间:2016-02-22 06:28:19

标签: git

我有一个我的团队一直致力于的git存储库。我们称之为main回购。现在我需要外部人员完成的一些事情,所以我复制了我在存储库中的文件并创建了一个新文件(让我们称之为snapshot repo。)

现在两个存储库都包含一些更改,我希望git能够理解snapshot存储库的起点是main repo的特定提交,然后合并更改来自两个回购。或者从snapshot挑选樱桃,然后不时在那里推送新快照。

你会怎么做?或者复制已经是一个错误?

2 个答案:

答案 0 :(得分:0)

  

或者复制已经是一个错误?

是。您应该已经完成​​了一个浅层克隆(具有1次提交的历史记录。但是与您拍摄快照的提交完全相同!)这样,您将能够共享提交,因为2个存储库至少具有提交常见的。

如果历史'外部'做了,你仍然可以尝试使用'git rebase --onto'做一些事情,不包含合并......

或者更困难,但是更好的长时间解决方案,在存储库中执行浅层克隆,获取现有存储库并执行“git replace”以使用新的更改根提交!

答案 1 :(得分:0)

在git工具箱中,有一个隐藏的命令可以帮助你解决问题:
git replace

这是一篇解释如何使用它的帖子:
Replace Kicker

以下是使用它的一种方法:

# start with a clone of your main repo :
git clone myrepo grafting
cd grafting

# add a copy of the 'external' repo as a remote :
git remote add external /path/to/external
git fetch external

# your main repo will be referenced as 'origin', the external repo as 'external'

# * you will need the hash of the original commit from which you created the
#   inital 'external' commit : I will call this commit <base>

# * you need the hash of the first commit on external :
#   I will call this commit <external>
git log --oneline external/master | tail -1

# "replace" the initial commit on external with the commit of your main repo :
git replace <external> <base>

您现在应该能够使用大多数git的命令,就像在external内移植origin一样。

我的建议是:从这个grafting目录中,构建一个干净的新回购,然后您将用作您和外部团队的参考。