能否重置Fork仓库的Commit历史使其呈现为全新项目状态?
Fork仓库重置为全新项目状态实现方法
完全可以实现,不需要重新手动创建新仓库迁移内容,两种方案按需选择即可,操作完成后仓库将清除所有原仓库提交历史、原仓库创建时间关联,呈现和全新创建项目一致的状态。
方案一:保留当前已修改的文件状态,清空历史
适合已经在fork仓库中做了部分内容调整、不想丢失现有改动的场景,操作全程在本地现有仓库目录下执行即可:
- 先同步本地仓库内容,确认所有需要保留的改动都已提交,本地文件状态和你要留存的最终内容完全一致
- 创建无任何提交历史的孤儿分支,该分支和原有仓库的所有提交节点没有关联:
git checkout --orphan new_init - 将当前目录下所有文件加入暂存区:
git add -A - 提交当前所有内容作为新项目的初始提交,提交信息可按需修改:
git commit -m "init: 新项目初始化" - 删除本地存储了旧提交历史的原默认分支,如果你的仓库默认分支为
main,将命令中master替换为main即可:git branch -D master - 将当前新建的无历史分支重命名为仓库默认分支名:
git branch -m master - 强制推送到远程fork仓库,覆盖远程原有所有历史记录:
git push -f origin master
推送完成后刷新仓库页面,即可看到所有原仓库的提交记录全部清除,仓库的提交统计、时间线都会重置为本次推送的状态,和新建仓库无差异。
方案二:从零初始化本地仓库
适合还未在fork仓库中做大量改动的场景,操作逻辑更直观:
- 本地新建空文件夹,将fork仓库中需要保留的业务文件全部复制到该文件夹下,不要复制原仓库根目录下的
.git隐藏文件夹 - 在新文件夹路径下执行命令初始化全新的git仓库:
git init - 关联你现有的fork远程仓库地址,地址可从fork仓库页面的克隆入口复制:
git remote add origin 你的远程仓库地址 - 执行提交、强制推送操作覆盖远程内容即可,最终效果和方案一完全一致。
注意:强制推送会不可逆覆盖远程仓库的所有原有历史,操作前建议先将原仓库完整克隆一份到本地备份,避免需要留存的内容丢失。
内容的提问来源于stack exchange,提问作者JSharles
相关产品推荐
相关产品推荐

