まとめ
初めてのOSS参加だったんですが、ブランチを切り忘れた結果別イシューの開発ができなくなってしまいました。そこでforkしてきた自分のリポジトリだからいいだろうとgit push -f をしたら承認済みのPRまで消えてしまって焦ったという話です。push -fは使わないようにしよう。
背景
今東京都とCode for Japanが一体となって作っている新型コロナウィルス感染症対策サイトに自分も参加していました。
Code for Japanの活動に去年からちょくちょく参加していましたが、サービス設計やデータ整備の部分を多くやっていたのでgitを使った集団開発はかじったことがある程度、、でした。なのですがQiitaに素晴らしい記事が公開されていたので初OSS参加やってみようと思い立ちました。
OSS参加のための素晴らしい記事
https://qiita.com/FPC_COMMUNITY/items/b9cc072813dc2231b2b2#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB
無事に初PRも承認されて、意気揚々と別のイシューに取り掛かったんですがそこでちょっとした問題が発生しました。
起こったこと
ブランチを切らずにdevelopmentで開発をしてPRを投げた自分、2つ目のissueにどう取り組むんだ?という疑問に突き当たりました。
このままdevelopmentにcommitしたら、そのコミットまでが1つ目のPRに乗ってしまいます。そこでようやく「集団作業の時は作業ごとにブランチを切れ!」という大原則を思い出しました。
本来はイシューを始める段階でブランチを切って開発して、そのブランチからPRを出すのが正解だったんですね。Developmentブランチは常にfork先の状態と一致させておく運用の方が直感的でわかりやすいです。
今からでも遅くはない、修正しようと思って行ったのが次の手順になります(結果面倒なことになったので真似しないでください)。
- ローカルブランチでIssue 1に取り組む前のコミットまで戻る
- ブランチを切ってnew-issue-1ブランチにIssue 1に関するコミットをcherry-pickを使って移動する
- 自分のリモートリポジトリのnew-issue-1ブランチにpushする
- developmentブランチに戻り、git reset --hard (コミット番号)でIssue 1に関するコミットログを消す
- (大戦犯)git push -f でリモートのdevelopmentブランチを元に戻す
自分のリポジトリには自分しかコミットしないしforce-pushしていいだろ〜とか軽く考えていたんですが、、、
結果承認済みだったIssue 1のPRが自動で閉じてしまいました・・・
プルリクエストは個人のリモートのdevelopmentブランチからfork先のリモートのdevelopmentブランチに送られているので、個人のリモートのdevelopmentからログが消えたら自動でプルリクエストは閉じる仕様になっていたようです。「せっかく通ったはずのPRを勝手にcloseさせてしまったショック」に数分打ちひしがれていたのですが、事情を説明してすぐにnew-issue-1ブランチからPRを送り直しました。
集団開発の時は必ずローカルのブランチを切ってから作業しましょう!
後OSS参加楽しいので是非みなさんもやりましょう!