筋肉マージは辞めよう

追記2 2019/12/04 21:00
こんなよくわからない記事をご覧いただきありがとうございます。
この事件を起こしたのは1年前で、**Gitを使いはじめて1ヶ月のとき**に下記の事件を起こしてしまっていてとても混乱していたのを当時覚えています。
内容については、`rm`をしたかもしれないという記事に結果的になったかもしれませんが、私の記憶ではファイルを消した記憶はありません。
ただ、当時作業していたディレクトリもないのでコマンドを確認する手段がないため一番濃厚な`rm`をしたというのを今回の結論にしました。
曖昧さは申し訳ありません。
また、意見、感想、批評には全て目を通させております。伝わりにくい内容やわかった事実は適宜編集してできるだけ皆さんに伝わるよう善処いたしますのでどうぞよろしくお願いします。
追記2ここまで

追記 2019/12/04　13:00
1.本番環境でやらかしちゃった人 Advent Calendar 2019で本番環境でないのではないかということですが、私自身は
文章をpushしたら本(原稿)ができあがるって本番環境じゃないか？と考え、申し込みました。
しかし、皆さんが考える本番環境の認識とは違うのではないかと考えています。
今回の件は申し訳ありません。もし、取り消すもしくは差し替えをする場合は下記コメントに連絡のほどよろしくお願いします。

2.友達に手伝ってもらい調査をした結果をまとめましたので修正させていただきます。申し訳ございません。
しかし、1年前のことだったり、ローカルに作業していたディレクトリがなかったり確信は持てませんので予めご了承ください。

追記ここまで


こんにちは。ぽちゃまと申します。
皆さんが投稿しているような本番環境ではないのですが、技術書典で共同執筆していたときにやらかした話です。

# 筋肉マージとは
自分でPRを立てる -> 自分でPRを承認してマージする
のように、チーム管理なのに一連の流れを自分の判断(権利)でやってしまうこと。
権利がある(偉い)を言い換えると、筋肉があるだと考えています。
なので、今回は自身の権限を行使してマージをした、すなわち筋肉を使ってマージをしたので
**筋肉マージ**としています。
(セルフマージと同じと考えていただいて構いません。インパクトの問題で筋肉マージと名付けました)


# やらかしちゃった(*ﾉω・*)ﾃﾍ
時は2019年2月8日22:50のことだった。
自分の担当の記事を書いてPRを立てた。
しかし、レビューをお互いにする時間まで後10分もなかったため自分でレビューをして自分でマージをする、権限を行使する、すなわち**筋肉**を使ってマージをした。
これからの一連の動作を**筋肉マージ**と呼ぶ。
そしたら、他の人のファイルが消えた。
![Screenshot from 2019-12-04 01-34-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196752/29753343-ec1a-d3ee-f91e-d1df5e7ce046.png)
↑これは慌ててる僕。

結局、別の人にあったPRを出した状態のやつがローカル環境にあったのでそれをソイヤして~~一部コミットを良い感じに出来なかった~~なんとかなりました。

# 惨劇はなぜおこってしまったのか(#´Д｀)
~~PRを自分でマージする前にブランチを最新にしていなかったのが原因でした。
みんな各々pullしてMergeされたらpullしてをちゃんとしていたのですが、僕はそれを怠っていました。
しかも、ちゃんとレビューしてもらえば防げたのに自分でマージをするという筋肉を発揮してしまったので、今回の惨劇がおこってしまいました。~~
友達の@onokatioに手伝ってもらい改めて考えられる原因を書かせていただきます。

## 原因
1.自分でrmをした。
![Screenshot from 2019-12-04 13-58-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196752/e5a315a2-2b8a-968e-aec6-51bbbd8f336f.png)

名前が載っているのでPR名は隠しましたが、ファイルがここで消えています。
まだ知識がなかったので差分ということでrmをしてしまった可能性があります。
しかし、rmをしたかどうかは覚えていなくて、どれくらいの曖昧かというと、テストのときに答えに−をつけたかどうかの曖昧さです。
もし、これが原因だったらごめんなさい。

2.ブランチを切らずにmasterで作業して作業の結果をmaster以外のブランチにpushした
タイトル通りに最初にmasterにいると思わずにmasterで作業をし、作業後にmaster以外のブランチにpushをしてしまった
結論は1と変わらないです。

3.マージミス
最初に挙げていたマージミスです。

でも、一番ありえるのは自分でrmをしてそれを基盤に作業したが濃厚です。

やってしまった...


#二度と惨劇を起こさないためにどうしたのか(｡•́︿•̀｡)
## (今回の原因がマージミスの場合)

- ブランチは常に最新にする
- マージをするときはPRの内容、差分をしっかりと見る
- レビューをきちんとしてもらう。


## (今回の原因が`rm`による削除だった場合)

- ファイルをやたらrmしないようにする。
- addするファイルをきちんと指定する。
- 今いるブランチがどこなのか、差分はどうなっているのかをきちんと確認する。


## (全体で言えること)


- *自分は大丈夫と慢心してはいけない*。
- やらかしたらすぐに謝る。
- チーム開発の場合はしっかりと他のメンバーにレビューしてもらう。
- 自分の判断でマージなどの重要なことをやらない。

#もし筋肉マージをして同じようなことが起こった場合
また、もし筋肉マージなど似たようなやらかしをしてしまい、同じようなことが起こった場合の修正方法も書いておきます。
他にも方法がありましたら編集リクエストで追加していただけたら幸いです。

## 別のメンバーのPR出したときのローカル環境をpushしてもらう。
今回はPRを最近出したままのメンバーがいた+そのPR後にPRは僕のしかないという状況があったので、別のメンバーの環境を再度pushしてもらい、マージをしました。

##revertする
@5ym さんより

```
git checkout master
git pull
git checkout -b revert
git revert HEAD^
git push origin HEAD
# revertブランチをmasterにマージ
git checkout master
git pull
git checkout ミスマージしたブランチ
git merge master 
git push origin HEAD
# 再マージ
```

## git reset する
これを書いて修正方法を調べていた時に以下のサイトにこのようなことが書いてありましたので共有させていただきます。
(ただし、これはcliでマージをした時の場合です。)

```
# マージする。
$ git checkout <マージ先ブランチ>
$ git merge <マージ元ブランチ>

# マージしたあと、やっぱやめよって思ったらこれをやる
# ORIG_HEADを指定すればマージ前に戻る
$ git reset --hard ORIG_HEAD
```
参考:[Gitでやらかした時に使える19個の奥義](https://qiita.com/muran001/items/dea2bbbaea1260098051#%E3%82%84%E3%82%89%E3%81%8B%E3%81%97%EF%BC%91%EF%BC%95%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%97%E3%81%9F%E3%81%91%E3%81%A9%E3%82%84%E3%81%A3%E3%81%B1%E3%82%8A%E5%85%83%E3%81%AB%E6%88%BB%E3%81%97%E3%81%9F%E3%81%84%E6%99%82)



#終わり
以上です。これを機に反復確認をするくらい落ち込んでました。
あの時はごめんなさい。
また、技術書典6で無事"#kosen16s"として販売が終了し、今Boothで売っているので気になった方は見てみて下さい！
これで僕のやらかし記事は終わります。少しでも役に立てたら幸いです。

何かありましたら、[Twitter](https://twitter.com/PotyaExe)までご連絡下さい。