GitHub issueを対応するときの開発フローについてまとめました。大まかな流れは以下の通りです。

  • gitブランチを作成しcheckoutする
  • ブランチ上で開発し実装完了したらコミットする
  • リモートにブランチ名でpushする(masterにpushしない)
  • GitHub上でプルリクエストを作成してmasterにマージする
  • issueをクローズする
  • ローカルにpullする

github-octocat 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 を実行する。

magit-status

1.2 magitヘルプ表示

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

magit-help

2 gitブランチを作成しcheckoutする

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

magit-branch-menu

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

magit-branch-start-at

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

magit-branch-new-name

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

magit-branch-on-feature-branch

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

magit-branch-terminal

3 ブランチ上で開発し実装完了したらコミットする

3.1 修正ファイルのstage

今回はAndroidStudioで開発しましたが、git操作は全てmagitで行うことにします。修正は完了した状態とします。

magit-statusのヘルプ表示から gキーを押すとmagit-statusの表示更新ができることがわかります。gキーを押すと修正ファイルがunstageの状態となっています。

magit-branch-unstage

修正ファイルの行にカーソルを当てて sキーを押すとstage状態になります。S(大文字S)キーで一括でstageできます。

3.2 修正ファイルのcommit

stage状態の設定が終わったらcommitします。commitはcキーです。commitメニューが表示されます。メニュー画面でcキーを押すとcommitできます。

magit-branch-commit-menu

そうするとdiff画面とcommitコメントを入力する画面が表示されます。とても便利です。 commitコメントには issue番号 を必ず入れます。issue番号を入れるとGitHubが自動でissueとcommitを紐づけてくれるからです。

今回のissue番号は #18 です。コメント記入したらC-c C-cとキー入力するとcommit実行できます。

magit-branch-commit-diff

4 リモートにブランチ名でpushする

magit-status画面でP(大文字P)キーを押すとpushメニューが表示されます。 push先のURLが設定済みの前提ですが、uキーでpushします。

magit-branch-push-menu

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

magit-branch-push-upstream

5 GitHub上でプルリクエストを作成してmasterにマージする

5.1 GitHub上でブランチを確認しプルリクエストを作成する

GitHubリポジトリのPullRequestsタブを開くと、ブランチがpushされたと表示されています。 Compare & pull requestボタンを押てプルリクエストを作成します。

github-branch

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

github-branch-open-pull-request

5.2 GitHub上でmergeする

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

github-branch-pull-request-menu

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

github-branch-pull-request-confirm

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

github-branch-pull-request-merged

6 issueをクローズする

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

github-issue-marged

クローズしました。

github-issue-closed

7 ローカルにpullする

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

magit-branch-before-pull

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

magit-branch-menu-before-pull

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

magit-branch-menu-checkout

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

magit-status-master

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

magit-status-pull-menu

反映できました。

magit-status-pulled-master

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

magit-status-deleted-branch

参考

GitHubの実践的な使い方を、実際に手を動かす形で解説する書籍です。初学者の方にもわかりやすいよう、基本的なGitやGitHubの使い方から、「ソーシャルコーディング」の目玉機能であるPull Requestの送り方・受け方まで解説します。また、外部ツールとの連携、GitHub FlowやGit Flowなど、GitHubを中心とした開発手法についてもしっかり解説しているので、中・上級者の方にも参考になるはずです。