Git(間違えてコミットしてしまったら)

git

人間誰しも間違えを犯す。今回は間違えてコミットしてしまった場合の対処を見ていこう。

amend

commitしたあとに間違いに気づくことは多い。そういったときは修正したコミットを作成しamendオプションをつけるとよい。
やってみよう!
デスクトップで以下のコマンド順番に実行して1つコミットオブジェクトを作成する。

$ mkdir test
$ cd test
$ git init
$ touch file1.txt
$ echo "lineOne" >> file1.txt
$ git add .
$ git commit -m"first commit"

コミットをしたが直後にOneは数字にしなければならなかったことに気づく。
amendを利用して歴史を書き換えよう。

$ vi flie1.txt
~Oneを1に書き換える
$ git add .
$ git commit --amend

エディタが立ち上がるのでコミットメッセージを修正する。特に変更の必要がなければそのまま保存をエディタを閉じる。これで無駄なコミット残らずに修正済みの歴史だけが残る。このamendはコミットメッセージだけを書き換えたいときなどにも有効だ。

reset –hard

先程は間違えを修正したが、ctrl+zのごとくそのコミットがまったくない以前の状態にもどすのがreset –hardださきほどの続きから以下を入力しよう。

$ echo "mistake" >> file1.txt
$ git commit -am"second commit"

-am オプションを使うとaddとcommitを一度に行える。

しかし、この変更は全く不要だったことに気づく。
ctrl+zのごとく以前の状態にもどりたい。

そういった場合は以下のコマンド打つ。

$ git reset --hard HEAD~

これでさきほどの間違えたコミットは消え去り、ファイルの内容からもmistakeという文字が消えた。つまり今回の作業をする前の状態に全てが戻ったということだ。

HEADというのは現在のブランチの最新のコミットを指すポインタで、これに~(チルダ)をつけることで一つ前のコミットを指すことができる。

その結果,一つ前のコミットの状態に作業フォルダも含めてリセットされた。

ちなみにHEAD~2と~の後ろに数字をつけることでもっと過去の状態にresetすることもできる。仮に~2とすると2つ前のコミットの状態にリセットされる。

rebase -i

rebaseを使うと歴史を変えられる、やってみよう。
まずは以下のようにわざとスペルミスをしてコミットする。

$ echo "lien2" >> file1.txt
$ git commit -am"1行追加"

その後、スペルミスを修正しコミットする

$ vi file1.txt
~~~lien2をline2に修正し保存する~~~
$ git commit -am"fix typo"

このスペルミスをした歴史をなかったことにしたい。。。
HEADから2つ前までのコミットをrebase

$ git rebase -i HEAD~2

消したい歴史にfixup(またはf)と書き換え保存する

タイプミスした歴史が消えてコミットログがきれいになった!

このようにrebaseを使うと歴史を変えることができる。ただ、rebaseは歴史を変える大手術なので、共同開発をしている際には注意していだきたい。

まとめ

もしコミットをしたあとに間違いに気づいた場合、もし修正して履歴を残していきたいのならamendを、そうではなくctrl+zのごとくスパッと以前の状態に戻したい場合はreset –hardを使っていくとよいだろう。

git
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました