脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

[Git]間違ってCommitした時、pushした時に修正する(戻す)方法

Gitで開発をしていてCommit/pushした内容をなかったことにして戻したい時の方法です。
デバッグコメントが残っていてしまった場合など、わざわざ1行修正するために別のCommitとして残したくない場合など

1. 間違ってCommitした内容を取り消す方法(ソースコードはそのまま残す)

間違ってCommitしちゃったけど、pushはまだしていない場合に、戻す方法。

$ git reset --soft HEAD^
  • "--soft"をつけると、現在のソースコードは変更せず、Commitしたという事実だけをなかったことにします
  • "HEAD^"はどの時点までのCommit履歴を修正するかを示します。(この場合は一個前のCommitを取り消します。)
2. 間違ってCommitした内容を取り消す方法(ソースコード毎以前のCommitに戻す)
$ git reset --hard HEAD^
  • "--hard"をつけると、ソースコードごと戻します。
  • つまり指定したCommit後に変更した内容は消えます。
3. 間違ってpushまでしてしまった内容を取り消す方法

間違ってCommitして、かつpushまでしてしまった場合でも以下のコマンドで修正できます。

$ git reset --soft HEAD^

###コードの修正等

$ git commit -a -c ORIG_HEAD #再Commit
$ git push -f origin {ブランチ名}:{ブランチ名} #再push

1. まずは"git reset"でCommit履歴を戻します。
2. 次にコード等の修正をします
3. 修正が終ったら再commitをします。

  • この時に"-c ORIG_HEAD"というオプションをつけると、以前使ったCommitメッセージを流用することが出来ます。

4. 最後にpushしなおす

  • この時普通にpushしようとすると「なんかお前のローカルブランチ、タイムリープしてね?」って起こられます。
  • "-f"オプションをつけることで無視して強制的(force)にpushして上書きします。

これで完了です。