使当前提交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?

下一篇: How to remove a directory from git repository?