Tips

【間違えてコミット】gitのコンフリクトを解消しつつマージする方法

resolve conflict eyecatch

gitの同じブランチ上で複数人が同時に作業をしてしまってcommit(コミット)した際に起きるconflict(コンフリクト)。

コンフリクトした際に自分のコードをいちいち避難して、バックアップとって…というのはめちゃくちゃ手間ですよね。そんな手間なくコンフリクトも解消できて、自分のコードを保持しつつマージもできる一石二鳥な方法をご紹介します。

gitをお使いになられている際はおそらくmerge(マージ)前のコンフリクトが多いかと思うので、当記事は「あ、やべ!間違えてコミットしちまったわ、あわわ。」という方が対象の記事です。

巷ではgit commit後の歴史改変やら、打ち消し方法などがそこかしこに転がっていますが大事な開発ファイルをぶっ飛ばしたらそれこそ取り返しがつかないので、安全かつもっとも利用頻度の高い解決方法として採択しています。

git fetch〜git resetで直前のcommit add打ち消し

コンフリクトしてしまってからは下手にコードやターミナルをいじらずにまずは、コミット先の最新情報を把握した上で、ご自身の直前のcommit addを打ち消しましょう。

まずは以下の太字のコードを入力してください。

git fetch で最新のブランチの状態を持ってくる。

git reset — soft HEAD^ で直前のコミットを打ち消し。

※ハイフンは2つあるので忘れないようにご注意を。

git reset index.html でファイルのリセットを実行。index.htmlは間違えて編集してしまった、コンフリクトしたファイルにしてください。

で、ここからが肝要です。

git stashで自身のコードを一旦異次元に避難する

そしてここのやり方が少し特殊なのですが、自身のコードを異次元に飛ばして一旦保存します。

git stash 云々という記述がそれにあたります。

異次元について厳密に解説すると骨が折れるのでここでは割愛します。リモートでもローカルでもない場所にコードを保管することができます。

git stash save で自分の書いたコードを異次元に避難させる。

git pull origin master 自分の書いたコードは一旦避難してあるので、その隙に他の方のコードをプルしちゃいましょう。

※origin masterは例です。環境によって変えてくださいね。

git stash pop で自分の異次元に飛ばしたコードを反映させましょう。ここで、ようやくお帰りなさいと言えるので一安心ですね。

最後にgit add commit pushして完了

これでコンフリクトは解消されるので、あとはお決まりのgit add commit pushをして該当ブランチにマージさせちゃってください。

git add .

git commit -m “”

git push origin master

※origin masterは例です。環境によって変えてくださいね。おそらくいきなりmasterにプッシュはありえないと思うのでdevとかに変えてください。悲惨なことになります。

gitコンフリクトは絶対に起きるもの

git commit後のgit conflict解消方法について綴りました。

gitのコンフリクトはほぼ100%起こります。そして、コンフリクトはみんなの責任であるケースがほとんどです。(後からコミットした人が悪いものみたいになるけど、事前に共有できてなかったmgrや同じプロジェクトの人間にも非がある)

なので、絶対に起こさないぞと思っていても起きてしまうものなので、予防策ももちろん大事ですが、コンフリクトを起こした後にどう対処するかの方が大事です。

下手にバレないように隠しても後で大ごとになったり、案件が燃えたりするだけです。