のび太:助けてよドラえも~ん!
ドラえもん:どうしたんだいのび太くん
のび太:ローカルの変更をpushする前に,pushしたいブランチをチェックアウトするのを忘れててそのまま間違ったブランチにpushしちゃったんだよ~!
ドラえもん:やれやれまったく君はおっちょこちょいなんだから。
ドラえもん:そういう時はgit revert
とgit cherry-pick
を使ってあげれば良いんだ。
ドラえもん:僕が横で見ててあげるからやってごらんよ。
のび太:どうやるの?
ドラえもん:まずはgit revert
とgit cherry-pick
がそれぞれ何をするのか確認しておこう。この記事にgit revert
がよく説明されているよ。
既存のコミットを取り消すためのコマンドです。
「取り消したいコミットを打ち消すようなコミットを新しく作成する」という処理によって、既存のコミットを取り消します。
出典:https://qiita.com/chihiro/items/2fa827d0eac98109e7ee
のび太:なるほど!直前のコミット履歴を消さずに新しく打ち消しコミットを作って直前のコミットを取り消すことができるのか!
ドラえもん:そう!吸収が速いじゃないかのび太くん,本当にのび太くんかい?
ドラえもん:それからこれがgit cherry-pick
の説明だよ!
他ブランチの特定コミットのみを反映されることができるコマンドです。(ママ)
出典:https://qiita.com/ta__ho/items/8204a22a53b02ee0817e
のび太:なるほど,これはそのまんまだね。
のび太:でもさドラえもん,「ちぇりーぴっく」って何?
ドラえもん:「ちぇりーぴっく」っていうのは日本語で「つまみ食い」って意味だよ。他のブランチから好きなコミットだけを「つまみ食い」して持ってくるからぴったりの名前だね。
のび太:git revert
とgit cherry-pick
が何なのかは分かったよ
ドラえもん:それじゃあ間違ったブランチにpushしてしまったコミットを正しいブランチにpushし直していこうか。まずはgit revert
から。
ドラえもん:その前に今いるブランチが間違ってpushしてしまったブランチかどうかを確認しよう。
のび太:うん。さっき間違ってpushしちゃったブランチにいるよ。
ドラえもん:よし,そしたらgit log
で間違ってpushしたコミットの"コミットID"をコピペしよう。
のび太:よしよし...ねぇ,git log
ってどうやって終わるの?
ドラえもん:Q
で終えられるよ。
そしてgit revert コミットID
からのgit push origin HEAD
だ!
ドラえもん:ここまででファイルの内容は間違いコミットの直前のコミットに戻っているはずだよ。
のび太:本当だ!オッケードラえもん,次は?
ドラえもん:そしたら,本来pushしたかったブランチをチェックアウトしよう。
ドラえもん:そして,git cherry-pick 間違いコミットのID
からのgit push origin HEAD
だ!
のび太:あ!本当だドラえもん,こっちにコミットしたかった内容がちゃんとpushできてるよ!
ドラえもん:おめでとうのび太くん!
...いかがでしたでしょうか。のび太ができすぎる気もしますがまとめると,
手順 | やること・達成内容 |
---|---|
1 | 今いるブランチが間違いコミットをしてしまったブランチかどうか確認 |
2 | もし別ブランチにいた場合は1のブランチをチェックアウトする |
3 |
git log で間違いコミットのコミットIDをコピペする |
4 |
git revert 3のコミットID してgit push origin HEAD する |
5 | 間違いコミットの取り消しに成功! |
6 | 本来pushしたかったブランチをチェックアウト |
7 |
git cherry-pick 3のコミットID してgit push origin HEAD
|
8 | 本来のブランチにコミットをpushできた! |
となります。今回自分がはまったことを記事にしておりますので,なかなか自分視点で分かりづらいところがあったかもしれません。間違いなどの指摘も大歓迎ですし,コメントなども頂けると嬉しいです。