ひろろの思うがままに。

自由奔放。思ったことや感じたこと、そんなことを書き溜めて、レベル上げて。

【Git】で誤って違うブランチにcommitしてしまった時の話

f:id:tack13:20190906233014p:plain

こんばんは、ひろろです。

今回なんですけども、Gitでコミットする際に流れ作業のように、タンタンッ!と違うブランチでやっちゃう時ってありますよね。

本来ならブランチを切ってから、対象ブランチに切り替えて実装を始めると思いますが、作ったつもりになってやっちゃうやつ。

私自身も月に1回くらいやらかしたりするんで、そんな時の対処法を、今後の自分への注意喚起と備忘録とします。

概要

  • ブランチを作成
  • コミットログを確認
  • ブランチの切り替え
  • コミットをchery-pickでをコピー
  • 間違えてコミットしたブランチのコミットを削除

流れとしては下記ブランチがあり、

  • develop(間違えたブランチ)
  • branch1(本来コミットしたかったブランチ)

developのコミット分をbranch1にコピーして、間違えをごまかしちゃおう!という感じです。

ブランチを作成

本来コミットする予定だったブランチを作成します。

$ git branch branch1 origin/develop

コミットログの確認

コミット番号が必要になるのでログの確認をします。

$ git log

// 直前のコミット
commit abcd1234 (HEAD -> develop)
Author: hiroro <hiroro@hateblo.co.jp>
Date:   Fri Sep 6 11:50:49 2019 +0900

    ...コミットメッセージ

abcd1234 が間違えてコミットした番号です。

ブランチの切り替え

本来コミットしたかったブランチに切り替えます。

$ git checkout branch1

コミットをchery-pickでをコピー

chery-pickとは

ざっくり言うと、過去のコミットから、そのコミットが持つ変更分を含んで新しいコミットを作成するためのコマンドです。

chery-pickでコミットをコピー

先ほど確認したコミット番号を使用して対象のコミットをコピーします。

$ git chery-pick abcd1234
$ git log

// コピーされてる(コミット番号は新たに生成されるので注意)
commit efgh5678 (HEAD -> develop)
Author: hiroro <hiroro@hateblo.co.jp>
Date:   Fri Sep 6 11:50:49 2019 +0900

    ...コミットメッセージ

間違えてコミットしたブランチのコミットを削除

developからコミットを削除します。

$ git checkout develop
$ git reset --hard HEAD^

HEAD^は直前のコミットを指します。

ここの指定によって削除するコミット数を変更できます。

※ 削除する場合は、十分に確認を行なってから実行してください。

一応確認します。

$ git log

// 間違ったコミットが出てこなければOK

まとめ

作業としては1分くらいで終わるものですが、「あ、やらかした?」と一瞬焦りはするので注意していこうと思います。

なんのためにbashでブランチ名出るようにしてるんだか。