記事の前提・ゴール
-
前提
-
ゴール
-
mainから作業ブランチを切り、変更を GitHub に push - Pull Request を作成し、自身や他者によりマージされる
- マージ後、最新状態を取得して次の作業を始められる
-
0. 今回のハンズオンでやること
今回のハンズオンでは、「GitHub上にあるリポジトリのクローン → コードの変更 → 次の作業の準備」 までを実際に行います。
説明は、下記フローに沿って行います。
本作業は必ず自身が作成したリポジトリで行ってください。
公開されているOSS等のリポジトリで内容のないPRを出すと、管理している方に多大な迷惑をかけることになります。
1. Git Graph の最低限の見方
赤枠で囲ったアイコンをクリックすることで、ツリーを表示することができる。
-
Git Graph の構成要素は3点
- ブランチ(線)
- コミット(塗りつぶされた点)
- 自分のいる場所(塗りつぶされていない点)
main origin のような表記のブランチはリモートブランチ、ローカルブランチ両方が同じ環境になっていることを表す。
feature/add-hello-world-page のように、origin のないものはローカルブランチの状態を表す。
origin/HEAD のようにorigin/ から始まるブランチは、リモートのブランチの状態を表す。
origin/HEADは、リモートリポジトリでの「デフォルトブランチ」を指す参照です。今回は意味が分からなくても問題ありません。
2. clone:リモートのコードを手元に持ってくる
目的:作業のスタート地点を作る
GitHub上のリポジトリページから、clone 用のURLをコピーする。

-
実行コマンド(xxx/yyy は環境によって異なる)
$ git clone https://github.com/xxx/yyy.git $ cd yyy -
clone で何が起きたか
- リポジトリを丸ごとコピー
- ローカルにて、
originというリモートが登録される
-
Git Graph を確認
-
mainが1本ある状態
-
3. 作業ブランチを切る(switch)
目的:main を直接変更せずに作業する
例として、Spring の環境構築を行うブランチの作成を行う。
簡単に確認したい場合、sample.md のようなファイルを作成し、任意の文字列を記述すると後続のコマンドを実施できる。
$ git switch -c feature/add-spring-setup
- なぜブランチを移動するか?
- 特に集団開発において、全員が共通で触る
mainブランチを直接触ると、コンフリクトの危険が高まるため - 自身の作業に明確な名前を付けることで、作業の内容をわかりやすくするため
- 後述するPR作成のため
- 特に集団開発において、全員が共通で触る
- Git Graph での変化
- 現在地が
feature/add-spring-setupブランチへ移動する
- 現在地が
4. add / commit:変更を「履歴」として保存する
目的:変更を Git に記録する
今回は Spring Boot を用いた環境構築実施後の内容を記録する。
-
状態確認
- ここでは現在どこのブランチにいるか、変更したファイル、新規作成したファイルを確認することができる
$ git status => On branch feature/add-spring-setup Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: .gitignore Untracked files: (use "git add <file>..." to include in what will be committed) .gitattributes .mvn/ mvnw mvnw.cmd pom.xml src/ no changes added to commit (use "git add" and/or "git commit -a") -
add
- コミットするファイルを選択するコマンド。今回はすべてコミットするため、変更を全選択をする。なお、この動作をステージングと呼ぶ
git add . -
commit(履歴を作成する)
git commit -m "add: Maven + Spring Boot の環境構築を実施" -
状態確認
$ git status => On branch feature/add-spring-setup nothing to commit, working tree clean -
よくある勘違い
-
commit時点ではリモートリポジトリ上(GitHub)には履歴は反映されていない
-
-
Git Graph での変化
コミット時(また、後述するPR作成時)に記載するコメントへ @ を記載しないようにしましょう。@ はメンションを表す記号として扱われるため、GitHub上のユーザへメンションが飛んでしまいます。
5. push:変更を GitHub に送る
目的:ローカルの履歴をリモートに共有する
git push origin HEAD
Git上で
HEADと記入した場合、現在いるブランチを表す。
長いブランチ名を毎回書かずに済むよう、このような書き方をしている。
-
GitHub での変化
-
Git Graphでの変化
6. Pull Request を作る → merge される
目的:レビューを経て main に取り込む
Pull Request とは
PRとは、自身の作成したコードが問題ないか、他者に確認(レビュー)してもらうための機能である。集団開発においては、基本的にレビューを通じて成果物の品質を担保する。
PRの必要性
レビューを行わず直接 main ブランチへpush を行ったり、個人の判断でmerge を行うことは、予期せぬ不具合の混入・コンフリクトの発生、品質の低下など他メンバーへの混乱を招く。
今回は個人での開発であるものの、集団開発の流れを体験するためPR の作成からmerge の流れを実施する。
- ブランチをpush後、GitHub 上で 下記のような表示が現れる。
Compare & pull requestをクリック
- 下記のように設定し
Create pull requestをクリック- base:
main - compare:
feature/add-spring-setup - Reviewers: 必要に応じて、GitHubアカウントを検索する
- Assignees:
assign yourselfをクリック。自身が選択される - Add a description: 適宜内容を記載。プロジェクトによって異なるが、今回は下記のように記載
## 実施したこと ## 確認したこと ## 実施してないこと
- base:
-
下部にある
Merge pull requestをクリックする -
merge された後に起きること
- リモートブランチの
mainにコミットが取り込まれる - feature ブランチは役目を終える
- リモートブランチの
-
Git Graphでの変化
- ローカル環境では変化なし
- GitGraph上 では変化がないように見えるが、GitHub(リモート)の
mainブランチにはfeature/add-spring-setupの変更が取り込まれている
前述のとおり、PR作成時に記載するコメントへ @ を記載しないようにしましょう。
7. PR マージ後、新しい作業を始める
目的:次の feature を正しい状態から切る
以降、新しい機能開発を行う場合は毎回下記を行う。
git switch main
git pull
git switch -c feature/add-hello-world-page
-
なぜ
pullが必要か -
Git Graphでの変化
8. revert:変更を取り消したいとき。
目的:履歴を壊さずに取り消す
誤った変更、不要になった変更を、他のコミットに影響がないよう安全に除去するためにrevert を行う。
-
実行例
- Commit: の横にある文字列が
commit id。引数にはこのid を記入する
git revert 9d8fd7ca0bad35ce3390fa8f269c353661b283ab - Commit: の横にある文字列が
-
Git Graphでの変化
※ revert は直前のコミットだけではなく、より前のコミットに対しても実施できる。
Appendix
今どのブランチにいるか
git branch
作業状況(ブランチ・変更状態)を確認する
git status
ブランチを最新にする
git pull
作業開始の定型手順
switch main → pull → switch -c










