我有一个很大的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
答案 0 :(得分:5)
更改提交ID是不可避免的。它们基于每个提交,提交消息和父提交ID的更改。
因为重新排列单个提交时父提交ID会发生变化,所以提交ID不能保持不变。