先月から、フィヨルドブートキャンプでチーム開発に入らせてもらった。
これまでの課題も GitHub 上の自分のリポジトリに PR を作ってレビューしてもらっていたので、GitHub には慣れているつもりだったが、最初は戸惑うところがあったのでメモしておく。
チームによって方針が異なるので、ここに書くのは一例でしかなく、こうしなければいけないというものではない。
流れ
最初だけ必要な作業
Issue ごとに繰り返す作業の流れ
- かんばんで、自分が作業する Issue を「作業中」に移動させる
- ローカルリポジトリの
master
ブランチから開発用のブランチ(例:some-feature
)を切る$ git checkout -b some-feature
some-feature
ブランチで作業してコミット- 作業終了
- プル
$ git pull origin master
master
ブランチを最新状態に
- リベース
some-feature
ブランチで、$ git rebase master
some-feature
ブランチの根元が、最新のmaster
の先端になる
- リモートリポジトリにプッシュ
$ git push origin some-feature
- PR(プルリクエスト)作成
- 作業前に Draft として PR を作成してもいい
- CI が通ったことを確認してから、レビュー依頼
- (修正作業など)
- 動作確認後、Issue を close する
備考
- レビューやデザインを依頼するなどして「待ち」になるまで、他の Issue の作業を始めてはいけない
- 今開発しているリポジトリはまだ
main
ではなくmaster
ブランチを使っているのでそのまま書いている - 5〜6は
pull --rebase
でまとめられる(プル・リベースについてはこちらの記事)
フォースプッシュは結構使う
Git を1からやり直す(リベース編) で、「一度プッシュしたコミットはリベースしない!」と書いたが、実際の開発ではしょっちゅうリベースしている。
作業途中でコードを見てもらいたいときや特に理由がなくても、作業完了前にプッシュすることはよくある。レビューを依頼するときには最新のmaster
ブランチを取り込んでおく必要があるため、上の手順の5以降をやることになる。
最初のプッシュをした後にmaster
ブランチが更新されていると、リベースかマージをする必要がある(どちらをやるかはチームにより異なる)。今のチームではリベースすることになっているため、同じコミットでもコミットのハッシュが変わり、プッシュできなくなる。
そこで、以下のコマンドでフォースプッシュ(強制プッシュ)する。
$ git push -f origin some-feature
フィヨルドブートキャンプの開発では、一つのブランチを複数人で触ることはないので特に問題は起こらない。
自分が作業するブランチを他の人も触る可能性がある場合は、--force-with-lease
オプションを使うと、誰かがプッシュしている場合に強制プッシュできなくなるので安心。--force-with-lease
を-f
のエイリアスにしてもよさそう。
(参考)現場で使える Ruby on Rails 5速習実践ガイド(9-1)