「先輩、Pushしたらコンフリクト100ファイルあるんですが...😇」
先輩「Meet繋いでやりますか😎」
転職4日目の私「神😭😭😭😭😭😭😭😭😭😭」
どんな状況?
・masterからブランチを切って作業しプルリクも作成している
・ビルドコマンドを打って、変更された100ほどのファイルをコミットしてプッシュ
・リモートに差分があり、コンフリクトしてしまった
・GitHub側に提示されたCommandlineを利用し、masterをブランチにマージしたが、手元で直そうにも対象ファイルが100個以上ある
・そもそもコマンドで勝手に変更されたファイルばかりでどう直していいかワカラン😇
誰が対象?
・コンフリクトが出た最後のコミット差分を失っても構わない
・今のブランチを消しても問題ないところまでコミットが済んでいる
やったこと
まずはコンフリクトが起こっているブランチ上(仮にuplorderブランチとする)で作業。
$ git status
// 作業ディレクトリの状態とステージング エリアの状態を表示するコマンド
$ git merge --abort
// マージしたらコンフリクトした、やっぱりマージやめよう。なコマンド
// コンフリクトの編集をしていないときに限る
$ git status
// もう一回状態を確認
masterブランチに移動し、作業
$ git checkout master
// ブランチの切り替え
$ git branch -D uplorder
// ローカルのuplorderブランチを削除
$ git branch
// uplorderブランチが消えたか確認
$ git pull origin master
// リモートリポジトリのmasterブランチの内容を、ローカルリポジトリの今いるブランチに反映させる
$ git status
// もう一回確認
$ git checkout -b uplorder
// もう一度、uplorderブランチを作り移動
※ブランチ名はプルリクからコピペできます。元の名前と一致させてください。(写真は個人開発のリポジトリです)
ターミナルに戻って、引き続き先程作り直したuplorderブランチで作業
$ git cherry-pick コピーしたコミットハッシュ値
// 特定のコミットを取り込む
$ git log --oneline
// gitのコミット履歴を1行ずつ見やすく表示
// ブランチに該当コミットが紐づけられたことを確認
ここで、再度ビルドコマンドを打ち変更をadd & commit
$ git push origin uplorder -f
// -f オプションを付けて強制push
これでOK。リモートの差分を取り込んでからuplorderブランチを新しく切ったためコンフリクトは解消され、 git cherry-pick
のコマンドで新しく作ったuplorderブランチとコミットを紐付けてPushしているため、差分もそのまま紐付けられています。
Gitの操作やコンフリクトの解消方法は様々かと思いますが、自分にはない解決方法だったので本当に勉強になりました。
git cherry-pick🍒コマンド知らなかったし、「ブランチ消す?!え?!」ってなったけどサクッと解決してまじ神。
めちゃくちゃ親切にしてもらいお礼を言ったら、「新卒の時にサポートしてもらったから自分もサポートしたい気持ちがある。自分も勉強になったからありがとう(意訳)」って言ってくれてエンジニアとしても尊敬すべき姿でした。姿勢も含めて見習います。
Thank you Binhさん!