1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubでPRを作成してmainにマージする基本手順

1
Posted at

はじめに

この記事では、作業ブランチで行った変更をGitHub上でPull Request(PR)を作成し、mainブランチへマージするまでの手順を説明します。

Gitの運用では、mainブランチへ直接pushせず、必ずPRを経由して変更を取り込むことが一般的です。PRを使うことで、変更内容・動作確認・履歴がGitHub上に記録され、mainを安全な状態に保てます。


前提

  • GitHubリポジトリは作成済み
  • ローカルで作業ブランチを作成済み
  • 作業ブランチでコミット済み
  • これから作業ブランチをGitHubへpushする
  • mainへ直接pushせず、PR経由で取り込む運用

この記事での例:

項目 ブランチ名
作業ブランチ chore/setup-laravel
マージ先 main

全体フロー

  1. 作業ブランチをGitHubへpush
  2. GitHubでPRを作成する
  3. PRの内容・コンフリクト有無を確認する
  4. PRをmainへマージする
  5. GitHub上の作業ブランチを削除する
  6. ローカルのmainを最新化する
  7. ローカルの作業ブランチを削除する
  8. リモート追跡ブランチを整理する
  9. 最終確認

※ 手順3でコンフリクトが発生した場合は、後述の「コンフリクトした場合」の手順で解消してから手順4へ進みます。


Pull Requestとは

Pull Request(PR)とは、作業ブランチで行った変更をmainなどのブランチに取り込んでよいかを確認・依頼する仕組みです。

PRを作成すると、変更内容・動作確認・確認結果をGitHub上に残せます。チーム開発ではレビューの場として使われ、個人開発でも変更履歴の管理に役立ちます。


1. 作業ブランチをGitHubへpushする

まず、作業ツリーがcleanな状態であることを確認します。

git status

nothing to commit, working tree cleanと表示されていれば、コミット漏れはありません。

次に、作業ブランチをGitHubへpushします。

git push -u origin chore/setup-laravel

-uオプションは、ローカルブランチとリモートブランチを紐付けるためのものです。初回pushの際に指定します。


2. GitHubでPRを作成する

GitHubのリポジトリページを開くと、pushした直後は以下のような通知が表示されます。

chore/setup-laravel had recent pushes  [Compare & pull request]

「Compare & pull request」 ボタンを押してPR作成画面へ進みます。

base と compare を確認する

PR作成画面の上部に、以下のようなブランチ選択が表示されます。

base: main  <-  compare: chore/setup-laravel
項目 意味
base 変更を取り込む先のブランチ(マージ先)
compare 変更を取り込む元のブランチ(作業ブランチ)

basecompareを逆にするとmainの変更を作業ブランチへ取り込む操作になってしまうため、必ず確認してください。


3. PRタイトルと本文を書く

PRタイトル例

chore: Laravel初期環境を構築

PR本文例

## 内容

- Laravel 10プロジェクトを作成
- Laravel Sailを設定
- Web / MySQL / phpMyAdmin のポート設定を追加
- phpMyAdminを追加
- SailのPHPバージョンを8.2に固定
- Breeze認証機能を追加
- timezone / locale / faker_locale を日本向けに設定
- Breeze日本語化を追加
- Laravel IDE Helperを導入
- Larastanを導入

## 動作確認

- `./vendor/bin/sail ps`
- `./vendor/bin/sail test`
- `./vendor/bin/sail npm run build`
- `./vendor/bin/phpstan analyse`

## 確認結果

- Laravel: http://localhost:82 表示OK
- phpMyAdmin: http://localhost:8083 表示OK
- MySQL: healthy
- PHPUnit: 25 passed
- Vite build: 成功
- PHPStan: No errors
- `git status`: clean

PR本文に「何をしたか」「どう確認したか」「結果はどうだったか」を書いておくと、後から変更の経緯を追いやすくなります。個人開発でも、作業ログとして役立ちます。

内容を確認したら 「Create pull request」 を押してPRを作成します。


4. PR作成後に確認すること

PRを作成すると、PR画面に以下のような表示が出ます。

This branch has no conflicts with the base branch.
Merging can be performed automatically.
表示 意味
No conflicts with base branch mainと作業ブランチの間でコンフリクト(競合)が発生していない
Merging can be performed automatically 自動でマージを実行できる状態

コンフリクトが発生している場合はマージ前に解消が必要です。コンフリクトがない状態を確認してからマージに進みます。


5. PRをmainへマージする

Merge pull request

PR画面下部の 「Merge pull request」 ボタンを押します。押すと、マージコミットのメッセージを入力するフォームが展開されます。デフォルトのメッセージのまま進めて問題ありません。

Confirm merge

「Confirm merge」 を押すと、マージが実行されます。

マージが完了すると、以下のメッセージが表示されます。

Pull request successfully merged and closed

この表示が出ればマージは完了です。


6. Add a comment について

PR画面には 「Add a comment」 という入力欄があります。これはPRに対してコメントを残すための欄です。

レビューコメントや補足事項を残す場合に使いますが、マージ操作自体には関係しません。今回のような個人開発の手順では、特に入力は必要ありません。


7. GitHub上の作業ブランチを削除する

マージが完了すると、PR画面に 「Delete branch」 ボタンが表示されます。

このボタンを押すと、GitHub上(リモート)の作業ブランチが削除されます。mainへのマージが済んだブランチは不要なため、削除してリポジトリをきれいに保ちます。

注意:この操作はGitHub上のリモートブランチを削除するだけです。ローカルの作業ブランチは別途削除する必要があります(手順9で説明します)。


8. ローカルmainを最新化する

ローカルのmainブランチに切り替え、GitHubへマージされた変更を取り込みます。

git switch main
git pull origin main

git pull origin mainを実行することで、GitHub上のmainの状態がローカルに反映されます。マージ後にこの操作を行わないと、ローカルのmainが古いままになるため、必ず実行してください。


9. ローカルの作業ブランチを削除する

ローカルの作業ブランチを削除します。

git branch -d chore/setup-laravel

-dオプションは、マージ済みのブランチのみ削除できる安全なオプションです。マージされていないブランチを誤って削除しようとした場合はエラーになります。

削除後、ブランチ一覧を確認します。

git branch

chore/setup-laravel が一覧から消えていればOKです。

GitHub側のブランチ削除(手順7)とローカルブランチ削除(この手順)は別の操作です。どちらか一方だけでは、もう一方には影響しません。


10. リモート追跡ブランチを整理する

GitHub上で作業ブランチを削除しても、ローカルの git branch -r に古いリモート追跡ブランチが残ることがあります。

たとえば、GitHub上では chore/setup-laravel を削除済みなのに、ローカルで以下のように表示される場合があります。

git branch -r
origin/chore/setup-laravel
origin/main

この状態でリモートブランチを削除しようとしても、GitHub上にはすでに存在しないため、以下のようなエラーになります。

git push origin --delete chore/setup-laravel
error: unable to delete 'chore/setup-laravel': remote ref does not exist
error: failed to push some refs to 'github.com:ユーザー名/リポジトリ名.git'

この場合、GitHub上のブランチはすでに削除済みで、ローカルに古いリモート追跡情報だけが残っている状態です。

古いリモート追跡ブランチ情報は、以下のコマンドで整理できます。

git fetch --prune

実行例:

From github.com:ユーザー名/リポジトリ名
 - [deleted]         (none)     -> origin/chore/setup-laravel

最後に確認します。

git branch -r
origin/main

origin/main だけになっていれば、不要なリモート追跡ブランチ情報は整理できています。

補足

git branch -r に表示されるのは、GitHub上の現在のブランチ一覧そのものではなく、ローカルが持っているリモート追跡ブランチ情報です。
そのため、GitHub上でブランチを削除しても、ローカル側の情報が古いまま残ることがあります。
その場合は git fetch --prune で整理します。


11. 最終確認

最後に作業ツリーの状態を確認します。

git status
On branch main
nothing to commit, working tree clean

この表示が出れば、すべての手順が完了しています。


コンフリクトした場合

PR画面でコンフリクトが表示された場合は、ローカルの作業ブランチにmainの最新状態を取り込み、衝突箇所を修正して再pushします。

1. 作業ブランチにいるか確認する

git branch

* chore/setup-laravelになっていればOKです。違う場合は切り替えます。

git switch chore/setup-laravel

2. GitHubの最新状態を取得して、作業ブランチに取り込む

git fetch origin
git merge origin/main

衝突があると、Gitが止まって以下のように表示されます。

CONFLICT (content): Merge conflict in resources/views/welcome.blade.php
Automatic merge failed; fix conflicts and then commit the result.

3. コンフリクトしているファイルを確認する

git status

both modified: と表示されているファイルがコンフリクト箇所です。

4. ファイルを開いて衝突箇所を修正する

コンフリクトしたファイルには以下の印が入ります。

<<<<<<< HEAD
作業ブランチ側の内容
=======
main側の内容
>>>>>>> origin/main
意味
<<<<<<< HEAD から ======= まで 現在の作業ブランチ側の内容
======= から >>>>>>> origin/main まで 取り込もうとしているmain側の内容

必要な方を残す、または両方を組み合わせて正しいコードにします。修正後は<<<<<<< ======= >>>>>>>の印をすべて削除します。

5. 動作確認後にコミットしてpushする

修正後は動作確認を行います。

./vendor/bin/sail test
./vendor/bin/sail npm run build
./vendor/bin/phpstan analyse

問題なければステージングしてコミットします。

git add resources/views/welcome.blade.php
git status
git commit
git push

git addには修正したファイルを指定します。git statusで対象ファイルを確認してからコミットすると安全です。

git commitを実行するとエディタが開きます。Gitが用意したマージコミットメッセージのまま保存して閉じればOKです。

修正対象が複数あり、内容を確認済みであればgit add .でまとめてステージングしても構いません。

GitHub上のPR画面でNo conflicts with base branchと表示されれば、コンフリクト解消完了です。通常通りMerge pull requestへ進めます。


よくある注意点

  • basecompareを逆にしない(baseがマージ先)
  • mainへ直接pushせず、必ずPR経由で取り込む
  • 少なくともマージ前には動作確認を済ませておく
  • マージ後はローカルでgit pull origin mainを実行してmainを最新化する
  • GitHub側のブランチ削除とローカルブランチ削除は別の操作
  • git branch -dはマージ済みのブランチのみ削除できる(未マージブランチの誤削除を防げる)
  • GitHub上でブランチを削除しても、git branch -r に古いリモート追跡ブランチが残ることがある
  • remote ref does not exist が出た場合は、GitHub上には存在せず、ローカルの追跡情報だけが残っている可能性がある
  • 古いリモート追跡情報は git fetch --prune で整理できる

まとめ

PRを使った運用では、作業内容・動作確認・確認結果がGitHub上に記録として残ります。mainブランチへ直接pushする運用に比べて、変更の経緯を追いやすく、誤った変更がmainに混入するリスクを減らせます。

個人開発であっても、PR経由でマージする習慣をつけておくと、チーム開発へのスムーズな移行にもつながります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?