我已经克隆了一个仓库:
FIRST_COMMIT="bf450342272a94117d78eae34a140a2a39359dad"
git rev-parse ${FIRST_COMMIT} > .git/shallow
git fsck --unreachable
git gc --prune=now
现在我尝试推送:
! [remote rejected] develop -> develop (shallow update not allowed)
我知道这个限制是由于仓库是浅层的。如何将浅层仓库转换为普通仓库?我不关心失去旧的历史记录,实际上,我想要丢弃旧的历史记录。为了澄清这一点:
- 我希望转换后的仓库保留浅层仓库的提交历史,包括元数据(日期、作者、提交信息等)。 - 我希望完全丢弃旧的历史记录。 - 我不关心与原始仓库的兼容性:这被视为一个新的仓库。 - 我不介意是否重新创建提交,只要元数据被保留即可。
编辑:简单地删除.git/shallow文件不起作用。
» git push -f --set-upstream myorigin develop
error: Could not read d18d4a247bebd32a3b57b2c0e5f9c28749083211
fatal: revision walk setup failed
error: remote unpack failed: eof before pack header was fully read
error: failed to push some refs to 'git@somehost:repos/somerepo.git'
编辑2
尝试使用fetch
取消浅层复制:
git fetch --unshallow
仍然留下了一个“grafted”代码库:
commit bf450342272a94117d78eae34a140a2a39359dad (grafted)
Author: The author
Date: Thu Nov 29 16:55:05 2018 +0100
Chages by pre-commit hook (!?)
git fetch --unshallow
。 - Owen Delahoyfetch
从哪里获取?没有远程可以获取。该存储库目前是本地的。也就是说,我正在尝试推送到一个新的远程,它没有历史记录,并且我没有克隆。在这种情况下,“fetch”是什么意思? - blueFastgit reset --soft develop/master
,确保立即提交所有文件并推送所有文件。如果需要恢复历史记录,你应该能够再次使用git reflog
中的提交哈希进行软重置。 - Owen Delahoy