# Git機能ブランチワークフロー

Git機能ブランチワークフローは、Talend Studioでチーム作業するうえで効率的です。このワークフローでは、mainブランチとは別の専用ブランチで機能開発がすべて行われます。

情報メモ注: Talend Studioでは、デフォルトのGitブランチがmasterではなく、(存在する時は)mainとなります。

機能ブランチワークフローは中央リポジトリーを前提としています。mainは公式のプロジェクト履歴を表します。新しい機能の作業を開始するたびに、開発者はローカルmainブランチで直接コミットする代わりに新しいブランチを作成します。したがって、mainブランチに触れることなく、複数の開発者が1つまたは複数の機能で同時に作業できます。

以下は、機能ブランチワークフローが使われたシナリオタイプ例です。これは、このモデルを利用できる数多い目的の一例です。

![機能ブランチワークフローの例。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio-git-feature-branch-workflow.png)

あるチームで、2人の開発者(AndyとLucy)が同じtalend-123という機能で作業しているとします。

最初に、Andyにこの新しい機能の作業が割り当てられました。彼は、Talend Studioでmainに基づいて新しい機能ブランチtalend-123を作成しました。

情報メモ注: 機能ブランチには説明的な名前(機能IDやJIRAチケット番号など)が必要です。

![Git機能ブランチを作成。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_create_branch.png)

Andyは今、Talend Studioでtalend-123というGitローカルブランチにログインしました。この時点で、このブランチはAndyのマシンにのみ存在しています。

リモートGitリポジトリーで機能ブランチが作成できるよう、AndyはTalend Studioで提供されているGitプッシュツールでプッシュを実行しました。

![プッシュしてリモートGitリポジトリーで機能ブランチを作成。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_push_branch.png)

Andyはjob1とjob2という2つのジョブを作成しました。この変更は、保存時にローカルブランチに自動でコミットされます。次に彼は、Talend Studioで提供されているGitプッシュツールを使い、変更をリモートGitブランチに手動でプッシュしました。

![変更を手動でリモートGitブランチにプッシュ。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_create_jobs.png)

ここで、Lucyにもこの機能の作業が割り当てられました。彼女はリモート機能ブランチであるtalend-123をローカルブランチとしてチェックアウトした後、このローカルブランチでジョブjob1を変更し、新しいジョブjob3を作成しました。

![ローカルブランチとしてチェックアウト。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_check_out_as_local_branch.png) ![ローカルブランチでの新しいジョブ。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_change_job_lucy.png)

Lucyがジョブjob1で作業している間、Andyもジョブjob1で変更を行い、ローカル機能ブランチでジョブレットjoblet1を作成してリモートリポジトリーに変更をプッシュしました。

![変更をリモートリポジトリーにプッシュ。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_change_job_andy.png)

Lucyは自分のジョブであるjob1とjob3の変更をリモートブランチtalend-123にプッシュしようとしましたが、Andyもジョブjob1の変更をリモートリポジトリーにプッシュしたばかりだったため、Lucyのプッシュはリジェクトされました。

![プッシュがリジェクトされた時のエラーメッセージ。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_push_rejected.png)

Lucyはまずリモート機能ブランチであるtalend-123からプルする必要がありますが、AndyもLucyもジョブjob1で変更を行ったため競合が見つかりました。

![競合が存在する場合のエラーメッセージ](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_conflicts_found.png)

Lucyはこの競合を解決しなければなりません。このケースでは、LucyはAndyの変更をすべて受け入れ、競合を解決済みとしてマークしました。競合がすべて解決されると、プルが完了します。Lucyは自分の変更を正しくプッシュしました。

ブランチ間の競合を解決する詳細については、 [ブランチ間の競合を解決](https://help.qlik.com/talend/ja-JP/studio-user-guide/8.0/resolving-conflicts-between-branches-git-only)をご覧ください。

![競合を解決。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_resolve_conflicts.png)

talend-123というリモート機能ブランチには現在、両開発者の変更が含まれています。

機能の開発が終わったら、開発者はリモート機能ブランチtalend-123での変更をリモートブランチmainにマージします。このマージは、リモートブランチmainをローカルブランチとしてチェックアウトし、リモートブランチtalend-123からプルしてマージするリクエストを実行し、ローカルブランチmainからリモートブランチmainにプッシュすることで行われます。

![ローカルのメインブランチからリモートのメインブランチにプッシュ。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/studio_git_pull_and_merge.png)