使当前提交Git仓库中唯一的(初始)提交?
我目前有一个本地Git存储库,我将其推送到Github存储库。
本地存储库有10个提交,并且Github存储库是一个同步的副本。
我想要从本地Git存储库中删除所有版本历史记录,所以存储库的当前内容显示为唯一的提交(因此存储库中旧版本的文件未被存储)。
然后我想将这些更改推送给Github。
我调查过Git rebase,但这似乎更适合删除特定版本。 另一个可能的解决方案是删除本地回购,并创建一个新的 - 虽然这可能会创造很多工作!
ETA:有特定的目录/文件未被跟踪 - 如果可能的话,我想保留这些文件的未跟踪。
这是暴力方法。 它还会删除存储库的配置。
注意 :如果存储库有子模块,这不起作用! 如果你使用子模块,你应该使用例如交互式底座
第1步:删除所有历史记录( 确保您有备份,这是无法恢复的 )
rm -rf .git
第2步:仅用当前内容重建Git仓库
git init
git add .
git commit -m "Initial commit"
第3步:推送到GitHub。
git remote add origin <github-uri>
git push -u --force origin master
唯一适用于我的解决方案(并保持子模块正常工作)是
git checkout --orphan newBranch
git add -A # Add all files and commit them
git commit
git branch -D master # Deletes the master branch
git branch -m master # Rename the current branch to master
git push -f origin master # Force push master branch to github
git gc --aggressive --prune=all # remove the old files
当我有子模块时,删除.git/
总会导致巨大的问题。 使用git rebase --root
会以某种方式为我造成冲突(并且需要很长的时间,因为我有很多历史记录)。
这是我喜欢的方法:
git branch new_branch_name $(echo "commit message" | git commit-tree HEAD^{tree})
这将创建一个新的分支,其中一个提交添加HEAD中的所有内容。 它不会改变任何东西,所以它是完全安全的。
链接地址: http://www.djcxy.com/p/45191.html上一篇: Make the current commit the only (initial) commit in a Git repository?