git revertのミスでmergeできなくなった話
突然ですけど、gitって便利ですよね。
便利な反面頼りすぎるとgitで問題が発生した際に業務が進まなくなる可能性もあります。
今回は新入社員の私が教わったコマンドに頼りすぎて失敗した話です。
この記事は アイソルート Advent Calendar 2020 13日目の記事です。
目次
はじめに
入社1年目で、クラウドソリューションに所属しているshimizu.shoです。
主にウェブアプリケーションの開発を行っています。
入社前にも簡単な開発を行っていたので、gitの簡単な操作(add,commit,push,clone)ぐらいは分かっていました。
gitの便利なコマンド
①直前にcommitしたものを修正するコマンド
「git commit —amend」
直前にコミットしたものに修正を追加することができるcommitコマンドのオプションです。
コミットの総数が変わらないため、きれいなコミット履歴が作れます。
②指定したコミットを打ち消すコミットを作成するコマンド
「git revert <commit>」
gitで誤ってpushした際に、既存のコミットを消去するコミットを作り出すコマンドです。
remote リポジトリにも通知がいくため、remoteとlocalで差異が発生しないため、
取り消しても問題なくpushなどができます。
③ブランチの差分を表示するコマンド
「git diff origin/<ブランチ名> (–name-only)」
ブランチの差分を表示してくれるコマンドです。
–name-onlyを付けるとファイル名だけ表示してくれます。
変更箇所が多いときは、見やすくなります。
失敗時のgit構成
Master:
- 品質が保証されているブランチ
Develop:
- 開発用のブランチ
- マージする際には、管理者のレビューが必要
- 基本的にこのブランチ上で編集を行わない
Feature/***:
- 開発者が作業するブランチ
- ここで機能を追加する。
失敗したこと
・失敗内容
Featureで作業していたら、Developからのmergeができなくなった!!
・操作手順
1.Developにマージリクエストを出すため、Developを作業中のFeatureにマージする。
2.この後自分の編集ファイルのミスが発覚し、ファイルを修正(以降修正Aと呼ぶ)
3.何も考えず、修正Aを「git commit –amend」でcommitを行い、そのままpush
4.push後、修正Aがマージの中に混ざっていることに気づく
5.「git revert -m 1 <commit>」で、マージをいったん取り消し。
6.修正Aを普通に「git commit -m “”」コミット
7.もう一度、DevelopをマージしようとしてもDevelopの内容がマージされない。
8.git diff Developを行っても差分が表示される。
・原因
git revertでマージを取り消しした場合、マージ元のブランチを認識することができないみたいです。
マージした事実のみ残っており、再度マージしてもすでにマージ済みと認識されているので反映されないようです。
参考:(https://www.isoroot.jp/blog/2502/)
なので、再マージする際にgit revertのコミットにrevertを行い、誤ってcommit —amendしたデータは手作業で修正する必要があるみたいです。
・この時の解決方法
現在のFeatureを放棄し、新しいブランチを作って対応しました。
ここから学んだ事
・git commit –amendの使うタイミングを意識(マージの後に使わない)
・git revertを使わないように、pushする前に確認するよう心掛ける。
・あきらめも肝心
→重要なことはシステムを作ること。ツールに左右されてはいけない!!
終わりに
今回は、gitで失敗した話をしました。
今年一年間、どこの現場に行ってもgitは必須のツールでした。
そんなよく使われるgitで躓いてしまうと全然作業が進まないことも同時にこの1年で実感しました。
この記事が少しでも、皆さんのライフハックを良くしてくれることを願っています。
次回は、kubo.yさんの【SharePointOnline】かゆいところに手が届く!SharePoint開発でできることです。お楽しみに!