Git
GitHub

Git リモートリポジトリ 特定コミット地点に遡る

More than 1 year has passed since last update.

個人開発でもリモートリポジトリとしてGitHubを使っている方はいらっしゃると思います。

今回は誤ったプッシュをしてしまい、修正のための操作を色々行った結果コミットログもマージもややこしくなってしまった...という事態を想定しています。

できること

  • 特定コミットより後のログの全消去
  • 特定コミットをmasterブランチのHEAD化

※チーム開発の際は大惨事となる可能性があるので、この方法は使用しないでください。
 また、消去は取り消せないため自己責任でお願いします。

なお、操作はローカルリポジトリのmasterブランチ上で、コマンドラインからを想定しています。

手順

1. 戻したいコミット地点のハッシュ値を調べる

git log

ハッシュ値というのはコミットごとに振られるIDのようなものです。
b606ffe5f3ad20ce8b9ea3f7fd25d...のような値が見つかると思います。
logコマンドはデフォルトであればlessコマンドと操作が同じなので、ターミナルから捜査している場合はqで戻れます。

2. HEADを戻したいコミット地点に指定する

git reset --hard 先ほど調べたハッシュ値

ハッシュ値は同一リポジトリ内で重複が無ければ省略が可能です。
おおよそ上7桁くらい入力すれば問題なく省略が使えると思います。
HEADが変更されたことを示すメッセージが出ればOKです。

3.強制プッシュ

git push -f origin ハッシュ値

これで特定コミット地点がmasterのHEADになります。