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>