tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【git】最初のgit commitを取り消す - `git update-ref -d HEAD`もしくは`git filter-branch`

はじめに

以前、http://tweeeety.hateblo.jp/entry/2015/06/10/214419という記事を書きました。

git reset xxxで普段のcommitの取り消しは問題なくできますが、
そのリポジトリで1発目のcommitの取り消しができません。

たとえばこんな時ありますよね。
「あ、間違ってauthor違う名前でcommitしちゃった。取り消して設定しなおそ」
みたいな。

そんな時のメモ

内容

  1. git reset xxxでcommit取り消しできない例
  2. git update-ref -d HEAD でcommit取り消しできる例
  3. git update-ref -d HEAD でcommit取り消したがgithub上は違う方法で変えなきゃな例

1. git reset xxxでcommit取り消しできない例

リポジトリを作成し、1発目にcommitしたものを取り消します。

# log確認。当然1つしかない
$ git log
commit 5646f5ca182c74329094f89c888d80f6b3de92fa
Author: hogehoge <hogehoge>
Date:   Fri Apr 14 22:32:41 2017 +0900

    first commit

# reset --soft HEAD^で1つ前を取り消そうと思ったけどできない
$ git reset --soft HEAD^
fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

2. git update-ref -d HEAD でcommit取り消しできる例

章題に書いてますが、git update-ref -d HEAD でできます。

# log確認。当然1つしかない
$ git log
commit 5646f5ca182c74329094f89c888d80f6b3de92fa
Author: hogehoge <hogehoge>
Date:   Fri Apr 14 22:32:41 2017 +0900

    first commit

# 
$ git update-ref -d HEAD

# 無事リセットされてる
$ git log
git log
fatal: bad default revision 'HEAD'

git update-ref についてはあまり調べてませんが、参照を更新するコマンドらしいです。

3. git update-ref -d HEAD でcommit取り消したがgithub上は違う方法で変えなきゃな例

2の項目で一見落着な感じでしたが、
これはlocalで行った操作が git add / git commit のみの場合です。

git push してgithub上にpushしてしまった場合は、以下の方法で変える必要があります。
※ ここは以前書いたのではしょりました

おわり

慣れてるつもりでもあんまりやらない操作だと
わからない事はまだまだ多いですね\(^o^)/