⚙️

【Git&Github】Gitのプルリクエスト(pull request)からマージ(marge)までのプロセスをわかりやすく解説

2024/07/15に公開

プルリクエスト(pull request:PR)とは

マージ(marge)とは

プルリクエストからマージまでのプロセス

1. 使用中ローカルブランチを確認

現在使用しているブランチを確認する
git branch 
出力結果(現在featureブランチを選択中であることを確認)
$ git branch
  develop
* feature
  main

2. 編集作業を行う

ファイル内にindex.htmlを作成し、以下のコードを貼り付ける(変更であればなんでも可)
<div>
    <h1>プルリクエストのテスト</h1>
</div>

3. 変更をステージングしてリモートブランチにプッシュ

ワークツリーからステージへプッシュ
git add .
ステージからローカルリポジトリへプッシュ
git commit -m "[Add] プルリクエストのテスト"
ローカルリポジトリからリモートリポジトリへプッシュ
git push -u origin feature

4. プルリクエストを作成

4-1.GitHubリポジトリページにアクセスする。

https://github.com/

4-2.「Pull requests」タブをクリックし「New pull request」ボタンをクリック。

4-3.ブランチ(baseとcompare)を選択。(今回はfeatureを選択)

4-4.「Create pull request」ボタンをクリックします。

4-5.タイトルと詳細欄を入力し、(説明欄には、変更の背景、目的、特記などを記述)「Create pull request」をクリックしてPRを送信する。


※必要であればレビュワー,ラベル,プロジェクト,マイルストーンの追加する。

レビュワー,ラベル,プロジェクト,マイルストーンについて

【レビュワーの追加】(GithubのSettingsからcollaboratorとしてレビュワーをリポジトリへ招待しておく必要がある)

【ラベル】
・Labelsは、Issueやプルリクエストをカテゴリ分けし、その性質や状態を示すためのタグ。
【プロジェクト】
・Issueやプルリクエストを整理し、進捗を追跡するためのツール。
【マイルストーン】
・プロジェクトの重要な節目や目標を設定し、関連するIssueやプルリクエストをグループ化するための機能

GitHubのデフォルトラベルとその一般的な用途

bug: ソフトウェアの不具合や予期しない動作を報告する際に使用。
documentation: ドキュメントの追加や更新が必要な場合に使用。
duplicate: 既存のIssueやプルリクエストと重複している場合に使用。
enhancement: 既存の機能の改善や拡張を提案する際に使用。
good first issue: 初めてプロジェクトに貢献する人向けの、比較的簡単なタスクを示す。
help wanted: コミュニティからの支援や貢献を求める際に使用。
invalid: Issueやプルリクエストが不適切または関連性がない場合に使用。
question: さらなる情報や明確化が必要な場合に使用。
wontfix: 対応しないと決定されたIssueに使用。

カスタムラベルの例:
priority: high/medium/low: タスクの優先度を示す。
status: in progress/review needed: タスクの現在の状態を示す。
type: feature/refactor: 変更の種類を示す。
version: v1.0/v2.0: 関連するソフトウェアのバージョンを示す。
area: frontend/backend/database: 変更が影響する領域を示す。

5. 内容に修正が必要になった場合の対応(無ければ6へ)

5-1.GitHubの「Pull Requests」タブし、該当するプルリクエストを選択する。

5-2.「File changes」を選択し、変更内容をレビューする。

5-3.レビュー者が+アイコンをクリックし、コメントを入れている(具体的な変更点や改善点が指摘されている)ため、そちらを確認する。

5-4.プルリクエストを作成したブランチに切り替える。

featureブランチへ切り替える
git checkout feature
出力結果
$ git checkout feature
Switched to branch 'feature'
Your branch is up to date with 'origin/feature'.
$ git branch       
  develop
* feature
  main

5-5.レビュー(5-3)で指摘を受けた通りにファイルを編集する。

変更後
<div>
    <h1>プルリクエストのテスト</h1>
</div>
<div>
    <p>確認しました</p>
</div>

5-6.変更をステージングしてリモートブランチにプッシュする。

ワークツリーからステージへプッシュ
git add .
ステージからローカルリポジトリへプッシュ
git commit -m "[Update] <p>タグの追加"
ローカルリポジトリからリモートリポジトリへプッシュ
git push -u origin feature

5-7.プッシュした変更内容が反映されているか確認する。


レビュワーの依頼通り確認しましたを追加している

6. プルリクエストのマージ

6-1.プルリクエストを開き該当するリクエストをクリックする。

6-2.「Merge pull request」ボタンをクリックする。

6-3.「Confirm merge」ボタンをクリックしてマージを完了する。

3種類のマージリクエスト方法について

6-4.そのブランチが必要なければ「Delete branch」をクリックする。

プルリクエストのマージを【ターミナル上で行う場合】

6-1.現在のブランチを確認する。

git branch 
出力結果
$ git branch       
  develop
* feature
  main

6-2.マージしたいブランチに切り替える。

git checkout main
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$ git branch       
  develop
  feature
* main

6-3.git mergeコマンドを実行

マージしたいブランチを
git merge <マージしたいブランチ名>
featureブランチをmainブランチにマージ
$ git merge feature
Updating 9a5862e..5a7dffc
Fast-forward
 myapp/static/style.css     | 0
 myapp/templates/index.html | 5 +++++
 2 files changed, 5 insertions(+)
 create mode 100644 myapp/static/style.css
 create mode 100644 myapp/templates/index.html
マージ戦略

Fast-forwardマージ:

  • 直線的に進むブランチの統合に使用します。
  • 歴史が直線的に保持されます。
    No-ffマージ(--no-ff):
  • マージコミットを作成し、マージの履歴を明示的に残します。
  • 変更の統合点が明確になるため、大規模プロジェクトでよく使われます。
    Squash and Merge:
  • 複数のコミットを一つにまとめてマージします。
  • コミット履歴が整理され、クリーンに保たれます。
    Rebase and Merge:
  • コミット履歴を再配置してからマージします。
  • 直線的な履歴を維持するために使用されますが、履歴の書き換えが伴うため、注意が必要です。

参考

https://qiita.com/tonnsama/items/2baca909d39dc9e23b07
https://qiita.com/obscure723/items/5265556d1b89e77c456b

Discussion