すべてのコミットを削除するためにリモートGitリポジトリをリセットする方法は?


164

リモートおよびローカルのGitリポジトリをリセットして、すべてのコミットを削除するにはどうすればよいですか?

最初のコミットとして、現在のヘッドから新たに始めたいと思います。



私はチェリーピックや他のことをしたくありません、すべての変更を削除してパブリックリポジトリもリセットしたいだけです。私は新しいGitユーザーなので、間違ったコミットをいくつか行いました。.GITディレクトリの削除は、パブリックリポジトリもあるため、オプションではありません。
Priyank Bolia 2010年

強制プッシュも実行できるため、.git dirの削除は実際にはオプションです。
リリスリバー

2
単なる手抜きですが、「改訂」はSVNの用語であり、ツリー型の歴史ではあまり意味がありません。
タマシュSzelei

2
@TamásSzelei「Revision」は「commit」の完全に受け入れ可能な同義語です。これは、Pro Gitブック(例:ここ)とGit manページの両方で使用されています。
jub0bs

回答:


348

完全にリセットしますか?

  1. .gitローカルでディレクトリを削除します。

  2. gitリポジトリを再作成します。

    $ 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から直接削除し、そこで再作成します。
Bombe

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

まず、この質問の指示に従って、すべてを1つのコミットに押しつぶします。次に、リモートに強制的にプッシュします。

$ 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を見つけるために使用してください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.