【Git】プルリクエストの手順 リベース版 簡易ポケットリファレンス

最近現場では プルリクエストによる開発が当たり前になっています。

また、マージではなくリベースによる管理が主流になっています。

marge と rebase の違いは置いといて、手順を忘れやすい方向けに手順をまとめました。

細かいコマンドやオプションに関しては他のサイトにてご確認ください。

Git環境

ブランチは下記の構成を前提とします。

master
develop-2
develop-1

・「master」
現在本番にてリリースされているブランチ
(Ver.1 と仮定する)

・「develop-2」
新規機能を開発するためのブランチ、「master」から作成
「develop-1」などから「master」にマージが発生した場合はリベースにて変更内容を取り込み強制プッシュします。
新規機能リリース時、またはリリース後に「master」へプルリクエストしてマージします。

・「develop-1」
Ver.1 にて不具合発生時に修正するためのブランチ、「master」から作成。
不具合修正後に「master」へプルリクエストしてマージします。

※「develop-2」の機能追加が終わり、新しく機能追加フェーズが発生した場合は「develop-3」を作成して改修作業を進めます。
※「develop-2」の「2」の数字はここではバージョンを示しています。恐らく「2.0.0」となると思いますが、マイナーバージョン番号等はリリース時に変更があっても大丈夫なうように細かく指定していません。「feature」ブランチ作成時に指定しても良いでしょう。

作業環境の構築

プロジェクトのクローン

まずは修正するプロジェクトをローカルへクローンしましょう。

git clone git@gexample.com:TestProject/test_project.git

プロジェクトディレクトリへ移動

クローンしたフォルダへ移動します。

cd test_project.git

ブランチを確認

現在のブランチの状態を確認します。(必須ではありません)

git branch -a

リモートでデフォルトブランチとして設定されているブランチが初期でローカルブランチにコピーされています。

リモートの「origin/develop」ブランチを 「feature/develop_top」として作成

今回は、「feature」というディレクトリを切ってその直下にブランチを作成します。

git checkout -b feature/develop-1-top origin/develop-1

リモートの 「develop」 ブランチからローカルブランチへ 「feature/develop-1-top」 としてコピーされます。また、ブランチがローカルの 「feature/develop-1-top」 へ自動で切り替わります。

※ 気をつければ良い話ですが、リモートの「develop-1」ブランチから必ず checkout しましょう。ローカルとリモートにて差分が発生している可能性があるからです。人は勘違いをすることもありますので、理由がない限りリモートから作成するように心がけましょう。

プログラムの修正

プログラムを修正します。

vi test1.txt
vi test2.txt

ステージングへ追加
git add test1.txt test2.txt

コミット
git commit

プッシュする前に rebase しよう!

「develop」の情報を最新へ更新

リモートブランチから全ての最新情報を取得する。

git fetch

「origin/develop-1」から更新分を取り込む

「feature/develop-1-top」で更新中に他の人が更新してリモートの「develop-1」へ取り込まれた修正分をローカルの「feature/develop-1-top」ブランチへ取り込みます。

git rebase origin/develop-1

リベース時にコンフリクトした場合

コンフリクトしたファイルを修正

vi test1.txt

コンフリクトで修正したファイルをステージングへ追加

git add test1.txt

リベースを続ける

git rebase --continue

コンフリクトが続いた場合

直したファイル数分繰り返す

vi test2.txt

git add test2.txt

git rebase --continue

リベースをやめて、rebase する前の状態へ戻す。

git rebase --abort

コミットをまとめましょう

プッシュ、プルリクエストをする前にソースレビューする人のためにコミットをまとめて可読しやすくしましょう。

※ 普段から「最後にコミットをまとめればいいや」と考え適当にコミットしまくるのはやめましょう。後に過去のコミットをまとめる時にコンフリクトが発生する場合があります。普段からコミット時に以前のコミットをまとめる習慣を付けましょう。

数を指定してコミットをまとめる場合

数値を指定することでまとめるコミット数を指定します。
git rebase -i HEAD~[数]
2つのコミットをまとめる場合
git rebase -i HEAD~2

実行すると丈夫に下記のメッセージが表示されます。

pick aa54fxx 1つ前のコミット
pick bb4a8xx 2つ前のコミット

pick の部分を下記を参考に修正します。

# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell

修正

pick aa54fxx 1つ前のコミット
s bb4a8xx 2つ前のコミット

セーブすると、再度コミットメッセージの編集へ移りますので、メッセージを修正して再度セーブするとまとめが完了します。

リベースが正常に終了したら

リベースでプログラムを取り込んだ「feature/develop-1-top」が正常に動作することを確認しましょう。

リベース後の内容をプッシュする。

ローカルの「feature/develop-1-top」ブランチをリモートへプッシュします。

git push origin feature/develop-1-top

プルリクエストを作成する

GitHubなどの管理画面からプルリクエストを作成してください。

その他の操作

stash

【Git】stash(修正一時退避) 簡易ポケットリファレンス
Git を利用した開発作業時に 「rebase」「pull」 をしたい場合、ファイルを退避することが多くあります。 stash を利用...

その他

【Git】その他 簡易ポケットリファレンス
Git その他の操作方法 まとめ ブランチを切り替える方法 ローカルに 「origin/develop」 をコピーして 「develop...

最後に

以上、一度はやったことはあるが、毎回覚えられない方向けに手順書を作成しましたのでご利用ください。