最近現場では プルリクエストによる開発が当たり前になっています。
また、マージではなくリベースによる管理が主流になっています。
marge と rebase の違いは置いといて、手順を忘れやすい方向けに手順をまとめました。
細かいコマンドやオプションに関しては他のサイトにてご確認ください。
Git 環境
ブランチは下記の構成を前提とします。
master
develop-feature-2
develop-modify-1.1
・「master」
現在本番にてリリースされているブランチ
(Ver.1 と仮定する)
・「develop-feature-2」
新規機能を開発するためのブランチ、「master」から作成
「develop-modify-1.1」などから「master」にマージが発生した場合はリベースにて変更内容を取り込み強制プッシュします。
新規機能リリース時、またはリリース後に「master」へプルリクエストしてマージします。
・「develop-modify-1.1」
不具合発生時に修正するためのブランチ、「master」から作成。
不具合修正後に「master」へプルリクエストしてマージします。
※「develop-feature-2」の機能追加が終わり、新しく機能追加フェーズが発生した場合は「develop-feature-3」を作成して改修作業を進めます。
※「develop-feature-2」の「2」の数字はここではバージョンを示しています。恐らく「2.0.0」となると思いますが、マイナーバージョン番号等はリリース時に変更があっても大丈夫なうように細かく指定していません。
※ 複数の人数、または複数の機能開発の場合は、「develop-feature-2」から「feature/develop-feature-2」ブランチ作成し「develop-feature-2」へプルリクエスト、マージをすることで管理をすると良いでしょう。
作業環境の構築
プロジェクトのクローン
まずは修正するプロジェクトをローカルへクローンしましょう。
git clone git@gexample.com:TestProject/test-project.git
プロジェクトディレクトリへ移動
クローンしたフォルダへ移動します。
cd test-project.git
ブランチを確認
現在のブランチの状態を確認します。(必須ではありません)
git branch -a
リモートでデフォルトブランチとして設定されているブランチが初期でローカルブランチにコピーされています。
リモートの「origin/master」ブランチを 「develop-feature-2」として作成
今回は、「feature」というディレクトリを切ってその直下にブランチを作成します。
git checkout -b develop-feature-2 origin/master
リモートの 「master」 ブランチからローカルブランチへ 「develop-feature-2」 としてコピーされます。また、ブランチがローカルの 「develop-feature-2」 へ自動で切り替わります。
※ 気をつければ良い話ですが、リモートの「master」ブランチから必ず checkout しましょう。ローカルとリモートにて差分が発生している可能性があるからです。人は勘違いをすることもありますので、理由がない限りリモートから作成するように心がけましょう。
プログラムの修正
プログラムを修正します。
vi test1.txt
vi test2.txt
ステージングへ追加
git add test1.txt test2.txt
コミット
git commit
プッシュする前に rebase しよう!
「develop」の情報を最新へ更新
リモートブランチから全ての最新情報を取得する。
git fetch
「origin/master」から更新分を取り込む
「develop-feature-2」で更新中に他の人が更新してリモートの「master」へ取り込まれた修正分をローカルの「develop-feature-2」ブランチへ取り込みます。
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つ前のコミット
セーブすると、再度コミットメッセージの編集へ移りますので、メッセージを修正して再度セーブするとまとめが完了します。
リベースが正常に終了したら
リベースでプログラムを取り込んだ「develop-feature-2」が正常に動作することを確認しましょう。
リベース後の内容をプッシュする。
ローカルの「develop-feature-2」ブランチをリモートへプッシュします。
git push origin develop-feature-2
プルリクエストを作成する
GitHubなどの管理画面からプルリクエストを作成してください。
その他の操作
stash
その他
最後に
以上、一度はやったことはあるが、毎回覚えられない方向けに手順書を作成しましたのでご利用ください。