Git:如何重置远程 Git 存储库以删除所有提交?

210

如何重置远程和本地Git存储库以删除所有提交?

我想以当前Head作为初始提交开始全新的工作。


请删除Git存储库中的选定提交。相关链接:https://dev59.com/D3RB5IYBdhLWcg3w1Kr0 - miku
我不想挑选或做其他任何事情,我只想删除所有更改并重置公共存储库。由于我是新的Git用户,我犯了一些错误的提交。删除.GIT目录不是选项,因为还有一个公共存储库存在。 - Priyank Bolia
你也可以进行强制推送,因此删除.git目录实际上是一种选择。 - Lilith River
2
只是挑刺一下,但“revision”是svn术语,在树形历史中并没有太多意义。 - Tamás Szelei
3
“修订”是“commit”的一个完全可以接受的同义词。它在《Pro Git》书中被使用(例如这里),并且也在Git手册中被使用。 - jub0bs
3个回答

432

完全重置?

  1. 在本地删除 .git 目录。

  2. 重新创建 Git 仓库:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. 将内容推送到远程服务器并覆盖现有内容。请记住,这样做会影响其他所有用户,请确保你是唯一的客户端。

  4. $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    

1
但是提交记录已经消失了,仓库也被重置了。我们能否在文件名前面也删除那些先前的消息呢? - Priyank Bolia
5
直接在GitHub上删除远程仓库并重新创建它。 - Bombe
1
应该使用 git push --force 而不是 git push -force。 - William Notowidagdo
13
如果您不想在“初始提交(Initial commit)”中提交任何文件,可以不添加任何文件,并在git commit -m'Initial commit'命令的末尾加上--allow-empty标志。请注意,此翻译保留了原文的意思,并尽可能地简化和澄清了表达方式。 - user2005477
2
使用Git 2.3.2,我不得不使用git push --force --set-upstream origin master,但其他所有内容都按照描述正常工作。 - Sébastien Stormacq
显示剩余3条评论

7

首先,按照这个问题中的说明将所有内容压缩为单个提交。 然后强制将其推送到远程:

$ git push origin +master

可以选择删除本地和远程的所有其他分支:

$ git push origin :<branch>
$ git branch -d <branch>

3

如果我是你,我会这样做:

在进行任何操作之前,请务必备份(谨慎总比后悔好)。

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

完成这些操作后,您可以删除其他分支。

结果:您将拥有一个仅包含2个提交的分支。

使用 git log --oneline 以最简洁的方式查看提交,并找到提交的SHA-1哈希值!


如果您不更改远程源,则这是一个很好的想法。 - clementiano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接