Skip to main content

ブランチとマージ

Diversion のブランチとマージにより、チームは安定したメインブランチを維持しながら、複数の機能を並行して作業できます。ミリ秒単位のブランチ作成とスマートマージにより、Diversion は並行開発を簡単にします。

ブランチとは?

ブランチ は、リポジトリ内の独立した開発ラインです。ブランチを使用すると:
  • メインコードベースに影響を与えずに機能に取り組む
  • 変更を安全に試す
  • 別々のタスクを同時に共同作業する
  • 新機能を開発しながら安定したリリースバージョンを維持する
Diversion における主な特徴:
  • リポジトリのサイズに関係なく、ブランチの作成はミリ秒単位
  • ブランチはサーバーサイド(クラウドベース)
  • すべてのチームメンバーがすべてのブランチを見ることができる
  • ファイルのコピーや重複はなし

ブランチとワークスペースの違い

ブランチについて詳しく学ぶ前に、ブランチがワークスペースとどのように関連しているかを理解することが重要です: こう考えてください:
  • ブランチ = コードが存在する場所(mainfeature-uibugfix-123 など)
  • ワークスペース = 個人的な作業台(ファイルをローカルで編集する場所)
ワークフローの例:
ワークスペースについて詳しく →

ブランチを作成する

デスクトップアプリでブランチを作成 することもできます。

新しいブランチを作成する

現在の位置からブランチを作成します:
何が起こるか:
  1. Diversion は現在のコミットを指す新しいブランチを作成します
  2. ブランチはすぐにすべてのチームメンバーが利用できるようになります
  3. 作成にはリポジトリサイズに関係なく約 100ms かかります
例:

特定のコミットからブランチを作成する

すべてのブランチを一覧表示する

出力例:
* はワークスペースの現在のブランチを示します。

ブランチ間の切り替え

デスクトップアプリでブランチを切り替える こともできます。

ブランチをチェックアウトする

ワークスペースを別のブランチに切り替えます:
何が起こるか:
  1. Diversion はワークスペースのファイルをターゲットブランチに合わせて更新します
  2. ローカルファイルはブランチの状態を反映するように変更されます
  3. 新しいコミットはこのブランチに対して行われます
ワークフローの例:
ブランチを切り替える前に:
  • 現在の変更をコミットする、破棄する、または シェルブ する
  • コミットされていない変更がある場合、Diversion が警告します
  • dv status を使用して保留中の変更を確認する

ブランチをマージする

デスクトップアプリでブランチをマージ することもできます。 マージは、あるブランチの変更を別のブランチに統合します。Diversion は自動的な競合検出を備えたスマートマージをサポートしています。

基本的なマージのワークフロー

目標: feature-uimain にマージする
1

ターゲットブランチに切り替える

まず、マージ のブランチをチェックアウトします:
2

ソースブランチをマージする

機能ブランチを main にマージします:
3

競合を解決する(必要な場合)

競合がある場合、Diversion が解決を案内します:
4

機能ブランチを削除する(オプション)

マージ後、機能ブランチを削除できます:

マージの仕組み

Diversion は共通祖先の検出を伴う 3-way マージ を使用します:
main から dv merge feature-ui を実行すると:
  1. Diversion は 共通祖先(コミット B)を見つけます
  2. B→C(main の変更)の変更を比較します
  3. B→E(feature の変更)の変更を比較します
  4. 両方の変更セットをインテリジェントに結合します
  5. 新しいマージコミットを作成します:
メリット:
  • 両方のブランチの履歴を保持
  • 競合を正確に検出
  • 完全な監査証跡を維持

マージ戦略

通常のマージ(デフォルト):
  • 両方のブランチのすべてのコミットを保持
  • マージコミットを作成
  • dv log で完全な履歴を確認可能
マージするタイミング:
  • 完全な履歴が欲しい場合
  • 機能のコミットが重要なマイルストーンである場合
  • 誰がどの変更を行ったかを追跡する必要がある場合

マージ競合の処理

デスクトップアプリは視覚的な競合解決ツールを提供します — デスクトップアプリでのマージ競合 を参照してください。 マージ競合は、同じ行のコードが両方のブランチで変更された場合に発生します。

競合検出

Diversion は競合が発生する前に防止します: リアルタイム通知:
  • 誰がどのファイルを編集しているか確認できる
  • 作業中のファイルをチームメイトが変更したときに通知を受ける
  • 競合が発生する前に変更を調整する
競合防止について詳しく →

競合を解決する

競合が発生した場合、Diversion は簡単に解決できるようにします:
1

競合するファイルを特定する

2

競合するファイルを開く

競合マーカーは両方のバージョンを表示します:
3

変更を選択または結合する

ファイルを編集して競合を解決します:
4

解決済みとしてマークする

解決したマージをコミットします:

競合解決のオプション

片方を完全に受け入れる: Web UI または API から:
  • 「ours」を受け入れる(main のバージョンを保持)
  • 「theirs」を受け入れる(機能ブランチのバージョンを使用)
  • すべての競合を一度に受け入れる
手動解決:
  • ファイルを編集して変更を結合する
  • 満足したらコミットする

ブランチのベストプラクティス

1. ブランチ命名規則

説明的で一貫した名前を使用します: 良い例:
命名パターン:
  • feature/ - 新機能
  • bugfix/ - バグ修正
  • hotfix/ - 緊急の本番修正
  • release/ - リリースブランチ
  • experimental/ - 実験的な作業

2. ブランチを短命に保つ

理由:
  • マージ競合を減らす
  • 変更のレビューが容易
  • 迅速な統合
方法:
  • 機能ブランチは週単位ではなく数日以内にマージする
  • マージ後にブランチを削除する
  • 小さく焦点を絞ったブランチを作成する

3. 頻繁にマージする

main を定期的に機能ブランチにマージします:
メリット:
  • 小さく容易なマージ
  • 競合を早期に検出
  • 機能が最新の main と互換性を保つ

4. 説明的なコミットメッセージを使う

5. マージ済みのブランチを削除する

マージ後、整理します:

一般的なブランチワークフロー

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

適用対象:複数の機能を同時に開発するチーム

リリースブランチワークフロー

適用対象:複数のリリースバージョンの管理

ホットフィックスワークフロー

適用対象:緊急の本番修正

トラブルシューティング

「Cannot switch branches: uncommitted changes」

問題: ワークスペースにコミットされていない変更があります。 解決方法:

「Merge conflict in multiple files」

問題: 多くのファイルに競合があります。 解決方法:
  1. 一度に1ファイルずつ競合を解決する
  2. dv status を使用して進捗を追跡する
  3. 重要でないファイルには片方を受け入れることを検討する
  4. 重要なファイルは手動でマージする

「Branch already exists」

問題: ブランチ名が既に使用されています。 解決方法:

CLI リファレンス

ブランチ管理:
マージ:
ステータス:
完全な CLI リファレンス

関連リソース

コアコンセプト: ワークフロー: CLI リファレンス:
最終更新: 2025-10-26