GitHub入門4

今回はコミットを変更する操作について書いていきます。

git reset 歴史を戻る

fix-aブランチをコミットしたけれどfix-aブランチを切る前に戻りたい。そして新たにfix-bブランチを作成したい。
開発をしているとかならずこのような場面に出くわします。
そんな時に使えるのがgit resetコマンドです。

まずはログの確認から

f:id:inappe:20140625133606p:plain

現状はfix-aをコミットしたところですね。これを.vimrcをコミットしたところまでさかのぼります。
git reset --hard "戻りたいハッシュ"

f:id:inappe:20140625133817p:plain

これでfix-aをコミットする前に戻れました。
ここでfix-bブランチを作り、README.mdを新たに作成します。

f:id:inappe:20140625134107p:plain

続けてそのままコミットしていまいます。
コミットした時点でのログがこちら

f:id:inappe:20140625134315p:plain

fix-bが新たにコミットされているのが確認できます。
そしてfix-aは確認できない状態ですね。
最終的にはfix-aとfix-bを合わせたいと考えているのでここで一度masterブランチに戻り、fix-aをmasterにマージしたいと思います。
ここでfix-aがコミットされた時の状態に再度戻りたいのでfix-bを作る為に戻した操作と同じようにgit reset --hard をおこないます。
ただ、先ほどと違って通常のログにはfix-aの履歴が残っていません。そこでgitの操作履歴から復元していきます。

f:id:inappe:20140625134842p:plain

そしてマージします。

f:id:inappe:20140625134922p:plain

続いてfix-bをマージしていきます。

f:id:inappe:20140625135031p:plain

はい、ここでコンフリクトが起こりました。
fix-a, fix-bともに編集していることからどっちが正しいの?ってgit側が聞いてきているわけですね。直してあげましょう。

f:id:inappe:20140625135502p:plain

はい、これであとはaddしてcommitするだけで無事、fix-aとfix-bをマージすることができます。
git reset --hardを使えばミスの修正など色々なことに応用が利きます。
便利ですね!ということで今回はこのあたりで(*'▽')