Gitを使い始めた頃、「プルリクを分けて」と言われて困ってたけど、知らない間にできるようになってた。
私のPRの出し方にはだいたい3パターンある。
- ローカルブランチを分けてpushしていく方法
- ローカルブランチ一本でpushしていく方法
- cherry-pickを使って、同じブランチ上のcommitを分けてPRを出す
注意点
だいぶざっくりとしか書いていないので、参考程度にしてください。
特に git reset --hard
や cherry-pick
は使い方を間違えるとものすごく面倒なことになったりするので。
ローカルブランチを分けてpushしていく方法 (おてがる度 ★★★★★)
いちばんシンプルでわかりやすい方法。
メリット
pushするときに手元(ローカル)のブランチとリモートのブランチの名前が一致しているので、混乱しない。
デメリット
手元のブランチが増えて煩雑になる。ブランチの削除が邪魔くさい。
手順
//typoブランチを作成
git checkout -b typo
//ブランチの起点先を指定したい場合は-bの前に指定
git checkout origin/master -b typo
//commitしたら自分のリポジトリにpushしてtypoブランチを作成(今回の場合、リモート名はshonoで登録済み)
git push shono typo
これで自分のリポジトリに typo
ブランチが作成されるので、GitHubでPRを出す。
ローカルブランチ一本でpushしていく方法 (おてがる度 ★★★)
いちばんよくやる方法。
メリット
手元のブランチが一本で済む。PhpStorm > Version Control > Log がすっきり見やすくなる。
デメリット
pushし忘れて reset --hard
したら終わるので注意が必要。
手順
//自分の今いるブランチを確認(今回はmaster)
git branch
//作業してcommitしたら、masterブランチをtypo2ブランチとして自分のリモートジポジトリに作成
git push shono master:typo2
これで自分のリポジトリに typo2
ブランチが作成されるので、GitHubでPRを出す。
で、
//先ほどの作業開始点の一つ前のcommit番号までreset --hardで戻す。
git reset --hard abcdef
これでmasterブランチがクリーンな状態に戻る。
cherry-pickを使って、同じブランチ上のcommitを分けてPRを出す (おてがる度 ★)
ブランチの切り替え or ブランチのリセットを忘れて作業してしまった場合。
メリット
「ブランチを複製して、reset --softをして不要なファイルだけをRevertしてcommitして...」といった作業なしにブランチを分けられる。
デメリット
事故りやすい。
手順
masterブランチにある連続したcommitを分けたい場合。(例 commit番号 aaabbb/cccddd)
//origin/masterを起点としてブランチ作成
git checkout origin/master -b dev
//devブランチにcheckout
git checkout dev
//欲しいcommit番号をcherry-pickする
git cherry-pick aaabbb
これでdevブランチに aaabbb
のコミットがくっついた形になるので、あとは「ローカルブランチを分けてpushしていく方法」に則ってPRを出していくだけ。