git split repo但具有相同的commit-id

时间:2014-02-26 00:55:53

标签: git git-filter-branch git-subtree

我有一个很大的git repo,我想将它拆分为2.我可以使用“git filter-branch”或“git subtree split”来完成此操作,但这两种方法都创建了全新的提交-id(SHA) 。我知道我们正在重写历史,它会改变commit-id。

但是我的要求即使在拆分回购后也需要具有相同的commit-id。有可能吗?

示例:

使用以下提交获得git repo foo-bar.git

*foo-bar.git*
1fd3dsg refs #1 change-1 to foo
4sad2as refs #2 change-1 to bar
3edsads refs #3 change-2 to foo
5adsggh refs #4 change-2 to bar

现在我们将repo foo-bar.git拆分为foo.git和bar.git。现在foo.git将获得为foo和bar.git做的所有提交将获得为bar提交的所有提交,但是他们的commit-id已经改变。

我得到了什么:

*foo.git*
s43dfsa refs #1 change-1 to foo
a234s2f refs #3 change-2 to foo

*bar.git*
1s3ds3q refs #2 change-1 to bar
3re2ef2s refs #4 change-2 to bar

我期待的是什么。

*foo.git*
1fd3dsg refs #1 change-1 to foo
3edsads refs #3 change-2 to foo

*bar.git*
4sad2as refs #2 change-1 to bar
5adsggh refs #4 change-2 to bar

1 个答案:

答案 0 :(得分:5)

更改提交ID是不可避免的。它们基于每个提交,提交消息和父提交ID的更改。

因为重新排列单个提交时父提交ID会发生变化,所以提交ID不能保持不变。