メインコンテンツへスキップ

3分で分かるチェリーピック図解とGitコマンド #自分用理解備忘録いろいろ


    画像
    画像

    3分でできる!Git Bashでチェリーピック

    チェリーピック(cherry-pick)は、特定のコミットを別のブランチに取り込む操作です。

    基本的な手順

    1. ブランチBに移動

    git checkout ブランチB
    

    2. ブランチAのコミットを確認

    git log ブランチA --oneline
    

    コミットハッシュ(例:a1b2c3d)をメモします。

    3. チェリーピック実行

    git cherry-pick a1b2c3d
    

    複数のコミットを取り込む場合

    連続したコミット

    git cherry-pick コミット1..コミット3
    

    個別のコミット

    git cherry-pick a1b2c3d b2c3d4e c3d4e5f
    

    コンフリクトが発生した場合

    # ファイルを手動で修正後
    git add .
    git cherry-pick --continue
    
    # または中止する場合
    git cherry-pick --abort
    

    実践例

    # ブランチBに移動
    git checkout branch-B
    
    # ブランチAの最新コミットをチェリーピック
    git cherry-pick branch-A
    
    # 確認
    git log --oneline
    

    これで完了です!チェリーピックしたコミットがブランチBに追加されます。



    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>3分でわかる!Gitチェリーピック</title>
        <style>
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
            
            body {
                font-family: 'Segoe UI', Meirio, sans-serif;
                background: linear-gradient(135deg, #667eea  0%, #764ba2  100%);
                padding: 20px;
                min-height: 100vh;
            }
            
            .container {
                max-width: 900px;
                margin: 0 auto;
                background: white;
                border-radius: 20px;
                padding: 40px;
                box-shadow: 0 20px 60px rgba(0,0,0,0.3);
            }
            
            h1 {
                color: #667eea ;
                text-align: center;
                margin-bottom: 10px;
                font-size: 2.2em;
            }
            
            .subtitle {
                text-align: center;
                color: #666 ;
                margin-bottom: 40px;
                font-size: 1.1em;
            }
            
            .diagram {
                background: #f8f9fa ;
                border-radius: 15px;
                padding: 30px;
                margin: 30px 0;
                border: 2px solid #e9ecef ;
            }
            
            .branch-container {
                margin: 20px 0;
            }
            
            .branch-label {
                font-weight: bold;
                color: #495057 ;
                margin-bottom: 15px;
                font-size: 1.1em;
            }
            
            .commits {
                display: flex;
                align-items: center;
                gap: 20px;
            }
            
            .commit {
                width: 60px;
                height: 60px;
                border-radius: 50%;
                display: flex;
                align-items: center;
                justify-content: center;
                font-weight: bold;
                color: white;
                font-size: 0.9em;
                box-shadow: 0 4px 10px rgba(0,0,0,0.2);
                position: relative;
            }
            
            .commit.branch-a {
                background: linear-gradient(135deg, #f093fb  0%, #f5576c  100%);
            }
            
            .commit.branch-b {
                background: linear-gradient(135deg, #4facfe  0%, #00f2fe  100%);
            }
            
            .commit.cherry {
                background: linear-gradient(135deg, #fa709a  0%, #fee140  100%);
                animation: pulse 2s infinite;
            }
            
            @keyframes pulse {
                0%, 100% { transform: scale(1); }
                50% { transform: scale(1.1); }
            }
            
            .arrow {
                font-size: 1.5em;
                color: #adb5bd ;
            }
            
            .arrow-down {
                text-align: center;
                font-size: 2em;
                color: #667eea ;
                margin: 20px 0;
            }
            
            .step {
                background: white;
                border-left: 4px solid #667eea ;
                padding: 20px;
                margin: 20px 0;
                border-radius: 8px;
                box-shadow: 0 2px 8px rgba(0,0,0,0.1);
            }
            
            .step-number {
                background: #667eea ;
                color: white;
                width: 35px;
                height: 35px;
                border-radius: 50%;
                display: inline-flex;
                align-items: center;
                justify-content: center;
                font-weight: bold;
                margin-right: 15px;
            }
            
            .step-title {
                font-size: 1.2em;
                font-weight: bold;
                color: #333 ;
                margin-bottom: 10px;
            }
            
            .code {
                background: #282c34 ;
                color: #61dafb ;
                padding: 15px 20px;
                border-radius: 8px;
                font-family: 'Courier New', monospace;
                margin: 10px 0;
                overflow-x: auto;
            }
            
            .code-comment {
                color: #6a9955 ;
            }
            
            .highlight {
                background: #fff3cd ;
                padding: 2px 6px;
                border-radius: 4px;
                font-weight: bold;
            }
            
            .info-box {
                background: #e7f3ff ;
                border-left: 4px solid #2196F3 ;
                padding: 15px;
                margin: 20px 0;
                border-radius: 8px;
            }
            
            .warning-box {
                background: #fff3cd ;
                border-left: 4px solid #ffc107 ;
                padding: 15px;
                margin: 20px 0;
                border-radius: 8px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <h1>🍒 3分でわかる!Gitチェリーピック</h1>
            <p class="subtitle">ブランチAの特定コミットをブランチBに取り込む方法</p>
            
            <div class="diagram">
                <h3 style="text-align: center; color: #495057 ; margin-bottom: 20px;">チェリーピック前</h3>
                
                <div class="branch-container">
                    <div class="branch-label">📍 ブランチA</div>
                    <div class="commits">
                        <div class="commit branch-a">A1</div>
                        <span class="arrow">→</span>
                        <div class="commit branch-a">A2</div>
                        <span class="arrow">→</span>
                        <div class="commit branch-a cherry">A3</div>
                    </div>
                </div>
                
                <div class="branch-container" style="margin-top: 40px;">
                    <div class="branch-label">📍 ブランチB</div>
                    <div class="commits">
                        <div class="commit branch-b">B1</div>
                        <span class="arrow">→</span>
                        <div class="commit branch-b">B2</div>
                    </div>
                </div>
            </div>
            
            <div class="arrow-down">⬇️ チェリーピック実行</div>
            
            <div class="diagram">
                <h3 style="text-align: center; color: #495057 ; margin-bottom: 20px;">チェリーピック後</h3>
                
                <div class="branch-container">
                    <div class="branch-label">📍 ブランチA(変更なし)</div>
                    <div class="commits">
                        <div class="commit branch-a">A1</div>
                        <span class="arrow">→</span>
                        <div class="commit branch-a">A2</div>
                        <span class="arrow">→</span>
                        <div class="commit branch-a">A3</div>
                    </div>
                </div>
                
                <div class="branch-container" style="margin-top: 40px;">
                    <div class="branch-label">📍 ブランチB(A3が追加される)</div>
                    <div class="commits">
                        <div class="commit branch-b">B1</div>
                        <span class="arrow">→</span>
                        <div class="commit branch-b">B2</div>
                        <span class="arrow">→</span>
                        <div class="commit cherry">A3'</div>
                    </div>
                </div>
            </div>
            
            <h2 style="color: #667eea ; margin-top: 40px; margin-bottom: 20px;">📝 実行手順</h2>
            
            <div class="step">
                <div style="display: flex; align-items: center; margin-bottom: 15px;">
                    <span class="step-number">1</span>
                    <span class="step-title">ブランチBに移動</span>
                </div>
                <div class="code">git checkout ブランチB</div>
                <p style="margin-top: 10px; color: #666 ;">取り込み先のブランチに移動します</p>
            </div>
            
            <div class="step">
                <div style="display: flex; align-items: center; margin-bottom: 15px;">
                    <span class="step-number">2</span>
                    <span class="step-title">ブランチAのコミットを確認</span>
                </div>
                <div class="code">
    git log ブランチA --oneline
    <span class="code-comment"># コミットハッシュをメモする</span>
                </div>
                <p style="margin-top: 10px; color: #666 ;">例:<span class="highlight">a1b2c3d</span> がコミットハッシュ</p>
            </div>
            
            <div class="step">
                <div style="display: flex; align-items: center; margin-bottom: 15px;">
                    <span class="step-number">3</span>
                    <span class="step-title">チェリーピック実行</span>
                </div>
                <div class="code">git cherry-pick a1b2c3d</div>
                <p style="margin-top: 10px; color: #666 ;">指定したコミットがブランチBに追加されます</p>
            </div>
            
            <div class="info-box">
                <strong>💡 複数のコミットを取り込む</strong><br>
                <div class="code" style="margin-top: 10px;">
    <span class="code-comment"># 連続したコミット</span>
    git cherry-pick コミット1..コミット3
    
    <span class="code-comment"># 個別のコミット</span>
    git cherry-pick a1b2c3d b2c3d4e c3d4e5f
                </div>
            </div>
            
            <div class="warning-box">
                <strong>⚠️ コンフリクトが発生した場合</strong><br>
                <div class="code" style="margin-top: 10px;">
    <span class="code-comment"># ファイルを修正後</span>
    git add .
    git cherry-pick --continue
    
    <span class="code-comment"># 中止する場合</span>
    git cherry-pick --abort
                </div>
            </div>
            
            <div style="margin-top: 40px; padding: 20px; background: linear-gradient(135deg, #667eea  0%, #764ba2  100%); border-radius: 15px; color: white; text-align: center;">
                <h3 style="margin-bottom: 10px;">🎯 チェリーピックのポイント</h3>
                <p>元のブランチは変更されず、選択したコミットだけを別のブランチにコピーできます</p>
            </div>
        </div>
    </body>
    </html>

    あなたへのおすすめ