Git コミット ブランチ 間違えた みたいな話。

◆事象

developブランチからfeatureブランチを切ったんで、作業してはローカルのfeatureにコミットをしていた。
していたつもりだったんだけど

ローカルのdevelopブランチにコミットしていた!Wow!

「誰かに土下座しようかしら」という考えが頭をよぎりつつ、「ありがちなミスだし解決する方法はLinusくんが用意してくれてるだろ」と思った。実際あった。誰が実装したのかは知らんがサンキューです

2018/11/15追記
よく考えたら、devをfeatureに向けてマージすりゃよかったのかと思った。けど、この記事は残しておく。

◆cherry-pick

どうやらcherry-pickというコマンドを使用すればよいらしい。

  • cherry – 処女
  • pick – 摘む、もぐ、採集する、摘んでやる

(うわ。

冗談はさておき、cherry-pickコマンドは「コミット(の変更)をブランチからブランチへコピーする」的な機能であった。俺の理解では。

んで、今回の問題である「ブランチ間違いコミット」について、以下の作業をすればよかろうと算段した。

  1. developに対してやらかしたコミットをfeatureへとcherry-pick
  2. developのローカルブランチを削除(わりとあやうい)

そして

  1. developをリモートからフェッチ
  2. developからfeatureへマージ
  3. featureをプッシュ
  4. developへプルリク

してしまってミッションコンプリートよ。勝ったな。

◆UIとバトる

すりゃいいことは分かったんだけど、Visual Studioをどう操作したもんかわからん。そもそもUIでcherry-pickをサポートしているかもわからない。

ググった結果、UIで可能だらしいんだが、何をすりゃいいのか解り辛い。要領を得ない。

参考サイト

◆最終的にどうすりゃよかったのか

  1. チームエクスプローラーの「ブランチ」で、featureブランチをダブルクリックしてチェックアウト
  2. developブランチを右クリックし、「履歴の表示」をクリック
  3. コピーしたいコミットを右クリックし、「チェリーピック」をクリック
    ※古いコミットから順にやったほうがいいんじゃないだろうか(提案)
  4. コンフリクトしたら頑張ってマージ

取り敢えず俺のやりたかったことは上記の操作でできた。

◆結論

GitとVisual StudioとAzure DevOpsの連携がエロすぎる。