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


164

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

我想从当前的Head开始重新开始。



我不想挑剔或做任何其他事情,我只想删除所有更改并也重置公共仓库。当我是新的Git用户时,我做了一些错误的提交。删除.GIT目录不是一个选择,因为也有一个公共存储库。
Priyank Bolia 2010年

您也可以强制执行,因此实际上删除.git dir是一个选择。
莉莉丝河

2
只是挑剔,但“修订”是svn术语,在树状的历史中意义不大。
陶Szelei

2
@TamásSzelei“修订”是“提交”的完全可接受的同义词。在Pro Git书(例如,此处)和Git手册页中都使用了它。
jub0bs 2015年

Answers:


348

完全重置?

  1. .git本地删除目录。

  2. 重新创建git repostory:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. 推送到远程服务器,覆盖。请记住,这样做会让其他人陷入困境……您最好成为唯一的客户。

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

1
但提交已消失,并且存储库已重置。我们可以同时删除文件名前面的那些以前的消息吗?
Priyank Bolia 2010年

2
直接在GitHub上删除远程存储库,然后在GitHub上重新创建。
孟买2010年

1
应该是git push --force而不是git push –force
William Notowidagdo

6
如果您不想在“初始提交”中提交任何文件,则可以不添加任何文件,而--allow-empty在末尾添加标志git commit -m 'Initial commit'
raf

2
使用Git 2.3.2,我不得不用git push --force --set-upstream origin master,但所描述其余的全是工作
塞巴斯蒂安Stormacq

6

首先,按照此问题中的说明将所有内容压缩为单个提交。然后强行推入遥控器:

$ git push origin +master

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

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

0

如果我是我,我会做这样的事情:

在做任何事情之前,请保留一份副本(比后悔更安全)

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提交!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.