GitHub Flowとmagitによるプルリクエスト開発フロー[個人開発向け]
GitHub issueを対応するときの開発フローについてまとめました。大まかな流れは以下の通りです。
- gitブランチを作成しcheckoutする
- ブランチ上で開発し実装完了したらコミットする
- リモートにブランチ名でpushする(masterにpushしない)
- GitHub上でプルリクエストを作成してmasterにマージする
- issueをクローズする
- ローカルにpullする
photo credit: ben_nuttall Octocat @ GitHub’s Oval Office via photopin (license)
著者について
この記事を書いている私はプログラミング歴15年です。 個人開発歴は3年、magit歴は2年程度です。
1 magitの使い方
私はSpacemacsを愛用しています。以降の操作は全てSpacemacs環境での利用を想定しています。
1.1 magit-status
git管理下にあるファイルをemacsで表示中に magit-status を実行する。

1.2 magitヘルプ表示
magit-status画面で ?キーを押すとヘルプを表示できる。

2 gitブランチを作成しcheckoutする
ヘルプ表示より bキーを押すとブランチが作成できることがわかりましたので bキーを押します。
そうするとブランチのメニュー表示が出ます。
今回はブランチを作成してcheckoutしたいので cキーを押します。

次にブランチの元を入力する画面が表示されます。masterをブランチ元とします。

ブランチ元を入力したら、今度はブランチ名を入力する画面が表示されます。
ブランチ名は feature/#issue番号/issue概要 にします。全部英語。
“feature”は機能開発用のブランチという意味です。

入力するとmagit-status画面に戻り、ブランチが作成されてcheckoutされた状態になりました。

一応ターミナル上でもgitの状態を確認してみると、ブランチがcheckoutされていることがわかります。

3 ブランチ上で開発し実装完了したらコミットする
3.1 修正ファイルのstage
今回はAndroidStudioで開発しましたが、git操作は全てmagitで行うことにします。修正は完了した状態とします。
magit-statusのヘルプ表示から gキーを押すとmagit-statusの表示更新ができることがわかります。gキーを押すと修正ファイルがunstageの状態となっています。

修正ファイルの行にカーソルを当てて sキーを押すとstage状態になります。S(大文字S)キーで一括でstageできます。
3.2 修正ファイルのcommit
stage状態の設定が終わったらcommitします。commitはcキーです。commitメニューが表示されます。メニュー画面でcキーを押すとcommitできます。

そうするとdiff画面とcommitコメントを入力する画面が表示されます。とても便利です。 commitコメントには issue番号 を必ず入れます。issue番号を入れるとGitHubが自動でissueとcommitを紐づけてくれるからです。
今回のissue番号は #18 です。コメント記入したらC-c C-cとキー入力するとcommit実行できます。

4 リモートにブランチ名でpushする
magit-status画面でP(大文字P)キーを押すとpushメニューが表示されます。
push先のURLが設定済みの前提ですが、uキーでpushします。

ブランチ名を入力する画面が表示されます。origin/ + ブランチ名 を入力します。
origin/feature/#18/issue_testです。これでpush完了です。

5 GitHub上でプルリクエストを作成してmasterにマージする
5.1 GitHub上でブランチを確認しプルリクエストを作成する
GitHubリポジトリのPullRequestsタブを開くと、ブランチがpushされたと表示されています。
Compare & pull requestボタンを押てプルリクエストを作成します。

ボタンを押すとプルリクエスト作成画面になります。必要な情報を入力してCreate pull requestボタンを押します。

5.2 GitHub上でmergeする
プルリクエストが作成されると、Merge pull requestボタンが出現しますので、ボタンを押します。

次にConfirm mergeボタンを押します。confirmとはマージして良いかの確認を意味します。

画面上にmergedと表示されました。マージ成功です。マージが終わったらブランチは不要なのでDelete baranchボタンを押してブランチを削除します。

6 issueをクローズする
issue画面を表示するとブランチでコミットした内容とプルリクエストによってマージした内容が表示されています。
Close issueボタンを押してissueをクローズします。

クローズしました。

7 ローカルにpullする
リモートのmasterの内容をローカルにpullします。まずはmagit-statusで状態の確認します。 featureブランチのままだったので、masterブランチに切り替えます。

magit-statusの画面で bキーを押してブランチメニューを表示します。ブランチメニューでも bキーを押してcheckoutするブランチを入力します。

checkoutするのはmasterですので、masterと入力します。

入力完了するとmagit-statusの画面に戻り、masterに切り替わった事がわかります。

masterに対してpullします。magit-status画面でF(大文字F)キーでpullのメニュー画面が表示されます。メニューではuキーを押す事でリモートのmasterの内容をローカルに反映できます。

反映できました。

不要になったブランチは削除しましょう。”feature/#18/issue_test”ブランチを削除しました。bキーでブランチメニューを表示してxキーでdeleteを選択し、削除するブランチ名を入力すればOKです。

参考
Subscribe via RSS