Gitでリモートmasterブランチの巻き戻し
GitHubの有料のプライベートリポジトリ数が無制限になったのを機に、いままでVPS上で管理していたSubversionのリポジトリをちまちまGitHubに移している。幸い、インターネット上でアクセス可能なSubversionリポジトリなら、GitHubは自動でインポートしてくれる機能がある。これを使えば、簡単にリポジトリの移管ができる。しかも、コミット履歴や、タグ、ブランチもそのまま移管してくれて、非常に便利。
ところで、あるプロジェクトのリポジトリを移管して少し困ったことが起こった。簡単に言うと、リモート上のmasterブランチをあるコミットポイントまで巻き戻したいのだ。これだけなら簡単なのだが、現時点のソースコードも別ブランチとして残しておきたいのだ。図にすると、
の状態を
にしたいのだ。手順としては、以下のようになる。
- ブランチを作成してpushする。この時点で、ローカルもリモートも
のようになる。 - リモートのmasterブランチを削除する。この時点で、リモートは
のようにhogeブランチのみになる。 - ローカル上でmasterブランチを指定のポイントまで巻き戻す。これは、例えば、指定ポイントのコミットIDが「84fds587」とするなら、
% git reset 84fds587
で可能。これで、ローカル上では
が実現できたことになる。 - 最後に、このmasterブランチをリモートにpushすれば、できあがり。
Gitでリモートリポジトリを巻き戻す - @tmtms のメモの記事が参考になった。