Git Cherry-Pick と Revertについか簡潔にまとめてみた
今日はcherry-pickとrevertについて簡潔に書きたいと思います。
Cherry-pickとは何?
簡単にいうろ、これは、特定のコミットを別のブランチにもってくることができる便利機能です。
例えば私は今、ブランチAにいるとします。そこで作業をし、3回ほどコミットし、プッシュしたとします。

上の図のような感じ。
しかし、メインのブランチにはコミット2までしか反映させたくないとします。こういう時にcherry-pickを使うことで、特定のコミットのみ他のブランチに反映できます。
Cherry-pickの使い方
特定のコミットを指定するにはどうしたらいいのか?
やりかたは2つ
1つめは以下のコマンドを入力
git log --oneline
すると、それぞれのコミットのIDを見ることができます。(コミットハッシュとばれるもの)

2つめはgithub/gitlabのコミットヒストリーからみることができます。

右側の番号がコミットハッシュでコピーすることができて便利です。
今私はブランチAにいるので、メインブランチに移動します。
git checkout main
commit2のIDはこの場合94772f8なので、このIDを使います。
git cherry-pick 94772f8
これで、メインにはブランチAのコミット2の分が反映されました!
こういうケースは今の所私は必要なことがなかったのですが、知っておくと便利だなと思いました!
Revertについて
Revertとは?
これは間違えてプッシュしてしまったのをキャンセルしたい時に使えます。resetというのもあるのですが、revertはコミットのヒストリー(履歴)に残ります。しかっしresetはヒストリーにも残りません。revertの方が安全だと言えます。もし誰かが私がrevertする前にpullしてきてしまったら、pushする時に問題が発生する可能性があるからです。
間違えて自分のブランチでなく、メインのブランチにプッシュしてしまった時に焦った覚えがあります。これは知っておくと便利だと思います。
Revertの使いかた
ではやってみましょう。

上の図のように、ブランチAのコミット3をキャンセルしてみましょう。
先ほど同様コミットハッシュが必要になります。
git log --oneline

IDは9edab8d
git revert 9edab8d
を実行

コミットのメッセージを書いてくださいとでるのですが、自動的に書いてあるのでこのまま保存して、フィアルを閉じます。

ファイルに変更があり、削除されたコードがあると書いてありますが、これで完了ではありません。
最後にプッシュをすることでリバートが完了します
git push
github/gitlabにもどりコミットヒストリーを見てみましょう

リバートできてますね!しかし、リバートしたコミット3を引きつづきローカルで編集したい場合はどうでしょう?今の段階ではローカルにコミット3のコードはありません。
このときは、cherry-pickがつかえますね!
これで間違えて、違うブランチにプッシュしてしまっても、対処できそうです。
Discussion