レッスン 19 · 歴史と統合
早送りマージを理解する
別のコミットを作成せずに、ターゲット ブランチを既存の子孫ダーク パレット コミットに移動します。この早送りを、拒否する必要がある分岐入力と比較してください。
- レベル: 中級者
- 3 分で読みました
- 5 分の動画
- 更新されました
- このレッスンの前に: 分岐した履歴を持つブランチをマージする
このブラウザに進行状況が保存されました。
再生すると、YouTube からビデオが読み込まれます (プライバシー強化モード)。
何を学ぶか
- 祖先の要件を認識します。
- 早送り後に同一のチップ ID を証明します。
- ref の移動をコミットの作成から分離します。
- 発散時の拒否を予測します。
始める前に
レッスン 18 の結果の別のコピーから開始します (メインはマージ、クリーン)。そのコミットでシナリオ/ff-target を作成し、同じコミットでフィーチャー/ダークモードを作成します。ダークパレットは、機能に関して 1 つのコミット D を取得します。マージ前のシナリオ/ff-target に戻ります。
このビデオは、Ubuntu 24.04 の Git 2.52.0 と GitTree 2.0 を使用して録画されました。ダーク パレット、そのコミット、チェックアウト、および両方のマージはアプリ内で行われました。 2 つのシナリオが分岐し、ターミナルでチェックが実行され、拒否がアプリに表示され、再びターミナルに表示されました。 macOS または Windows では何も実行されず、記録された Linux システムは Ubuntu だけです。 GitTree のソース Git フロアは 2.39.0 です。
GitTree はサインインを求めます。無料プランでは、ここでのすべてのステップがカバーされます。プロバイダー アカウント、プロ/トライアル、API 認証情報、インターネット サービスは必要ありません。ローカルのベアオリジンは GitLab または CI ではありません。すべてのアイデンティティは example.com を使用します。このレッスンをソース チェックアウト内で実行しないでください。
両方を連続してではなく、同一の入力で GitTree またはネイティブ パスのいずれかを介してミューテーションを作成します。読み取り専用検証はどちらの後にも続きます。最終的な作業として説明される準備はすべて、ネイティブの準備としてラベル付けされており、決して発明されたアプリの機能ではありません。
概念と状態の効果
ターゲット チップが入力チップの祖先である場合、早送りが可能です。ターゲット ラベルを子孫に移動すると、マージ コミットを作成せずに、間にあるスナップショットが組み込まれます。
結果として得られるチップには、D の既存の ID と親が含まれます。前の M はレッスン 18 の 2 つの親のマージのままです。その親を数えず、このレッスンで作成された新しいマージと間違えないでください。
早送りのみはポリシー ゲートであり、すべてのブランチを修復するものではありません。別のターゲット コミットが存在する場合、両方のチップに固有の履歴があり、このモードは拒否されます。
対象のブランチ/HEAD/インデックス/ワークのみM→Dに進みます。フィーチャーは D のままで、マージによって新しいコミットは作成されず、サーバーは変更されません。
正確なプロジェクトの状態を準備する
レッスン 18 で残した、プロジェクトの別の通常のコピーから開始します。元の gittree の機能は維持されます。このシナリオは、オリジナルまたはソース チェックアウトでは実行しないでください。 (コースの以前の計画では、別の開始チェックポイントという名前が付けられていました。ビデオでは、レッスン 18 の結果と同じ手順が使用されています。) 以下のスタイルシートは、プロジェクトのstyles.cssにダークパレットブロックを1つ追加したものです。リポジトリローカルのデモ署名はオフになっており、GitTree デモ <demo@example.com> が ID です。
完全なファイル入力
以下のフェーズでのみ保存します。これらは、最後に改行を含む完全な UTF-8/LF 本文です。 Markdown フェンスは決して貼り付けないでください。変更されていない実行可能ファイルは、名前付き入力を継承します。別のバリアントのバージョンでオリジナルを上書きしてはなりません。
style.css — ダーク
:root {
color-scheme: light;
--page: #f7f8fa;
--surface: #ffffff;
--text: #17212e;
--link: #154ab5;
--line: #bac4d0;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background: var(--page);
color: var(--text);
font: 1rem/1.6 system-ui, sans-serif;
}
a {
color: var(--link);
}
.site-header,
main,
footer {
width: min(68rem, 100% - 2rem);
margin-inline: auto;
}
.site-header {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
padding-block: 1rem;
}
.hero {
max-width: 48rem;
padding-block: 3rem;
}
h1 {
font-size: clamp(2rem, 5vw, 3.5rem);
line-height: 1.2;
}
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
gap: 1rem;
}
.feature-card {
padding: 1rem;
border: 1px solid var(--line);
border-radius: 0.75rem;
background: var(--surface);
}
section {
margin-block-end: 2rem;
}
button,
input {
font: inherit;
}
button,
input {
padding: 0.5rem 0.75rem;
}
:focus-visible {
outline: 3px solid var(--link);
outline-offset: 3px;
}
form {
display: grid;
max-width: 28rem;
gap: 0.5rem;
}
:root[data-theme="dark"] {
color-scheme: dark;
--page: #121923;
--surface: #1b2635;
--text: #edf2f8;
--link: #a4c6ff;
--line: #7388a1;
}GitTreeで
パレット: Command+Shift+P (Ubuntu では Ctrl+Shift+P);正確な名前のコマンドを入力して選択します。名前付き参照アクションは、引数のないパレット ショートカットではなく、その行のコンテキスト メニューを使用します。
- 以下のように、シナリオ/ff-target と feature/dark-mode を別のコピーに準備します。機能の DARK を完全に節約します。
- 特技としてstyles.cssのみをコミット: ダークパレットを追加します。機能 D を確認します。
- [ローカル] で scenario フォルダを開き、ff-target → Checkout scenario/ff-target を右クリックします。まだ M であり、クリーンであることを確認します。
- [ローカル] で feature フォルダを開き、dark-mode → Merge feature/dark-mode into scenario/ff-target を右クリックします。ダイアログでソースとターゲットを確認します。
- Record it as で Fast-forward only を選択します。 「常にマージコミット」を選択しないでください。
- 「一度結合」を選択して待ちます。ターゲット ラベルが既存の D に到達すると予想されます。
- ターゲットと機能の実際の完全な SHA を比較し、DARK とクリーンな作業を検査します。
- 別の分岐コピー (新しいタブと最近のリポジトリから開きます) で、早送りのみでマージを繰り返します。アプリは拒否し、ターゲットにまだ行っていない変更があると表示します。正規のオリジナルはそのままにしておきます。
すべての通常のコミット: 概要が記載された主題です。説明が空です。以前のコミットを修正し、フックをスキップし、サインオフ者を追加し、別の作成者を追加し、コミット後にプッシュし、空のコミットをオフに許可します。共著者はいません。指定したファイルのみをステージングし、N 個のファイルへの変更を 1 回コミットする (1 つのファイル)、または代わりに Command+Enter を押します。本当の結果を待ちましょう。明示的に修正するレッスンでは、指定されたオプションのみが変更されます。
ターミナル内
レッスン 18 の結果の別のコピー:
git switch --create scenario/ff-target
git switch --create feature/dark-mode完全な DARK スタイルシートを style.css の上に置き、次のようにします。
git add -- styles.css
git commit --quiet -m "feat: add the dark palette"
git switch --quiet scenario/ff-target
git merge --quiet --ff-only feature/dark-mode
git rev-parse HEAD feature/dark-mode
git log -1 --format=%s
git status --shortSHA クエリは 2 つの同一の実際の ID を与えます。観察対象:
feat: add the dark paletteステータスが空です。フィクスチャは、ターゲットが新しく作成されたマージ ノードではなく、以前に測定された D に等しいとアサートしました。入力が変更された場合は、マージする前に、独立した docs/integration-note.md コミットを別のコピーのターゲットに追加します。 ff-only は拒否し、両方のブランチを保持します。別のモードをサイレントに選択してポリシー チェックを緑色にしないでください。
結果
Where you end: シナリオ/ff-target および feature/dark-mode 名は既存の D と同じです。ターゲット HEAD/インデックス/ワークには DARK が含まれ、新しいマージ ノードはなく、元の main/M は変更されません。
よくある間違い
- 任意のグラフィカル行を呼び出すと、新しいマージ コミットが結合されます。
- 代替ペインを元のチェックポイントとして扱います。
- アプリが成功した後、完了したミューテーションを繰り返します。
何か問題が発生した場合
拒否された場合は、両方の履歴を検査し、確認後にのみ別のマージ/リベース ワークフローを選択します。拒否自体はターゲット ファイルや参照を変更しません。
理解度を確認してください
各質問に答えてから、その理由を読みましょう。 「必須」とマークされた質問は、レッスンの完了にカウントされます。
6 個中 0 個が正解です
必須の質問に正しく答えると、レッスンを完了できます。
このブラウザで確認しました。
練習する
ターゲットチップが既存の D に等しいこと、および作業が完全な DARK に一致することを証明します。独立したターゲットが別のコピーでコミットされた後の拒否を予測します。拒否後に古い参照を比較します。
あなた自身の確認: サイトはあなたのコンピュータを認識できません。
レッスンを完了するには、必須の質問に正しく答え、実践的な演習を確認してください。
要約
- 先祖関係により早送りが可能です。
- 受信したコミットはその ID を保持します。
- ffのみは発散を拒否します。
関連している
用語集の用語の紹介
早送り — تقديم سريع;子孫 — تابع;祖先 — سلف.
ビデオトランスクリプト
ビデオのナレーションが次々と流れます。
トランスクリプトを表示する
- 正確なチェックポイントから開始します。
- ブランチとインデックスに名前を付けます そして作業バージョン。
- 分離されたコースのコピーのみを準備します。
- 両方のブランチ名を開始します 同じコミットで。
- 実際のパレットの変更を記録します。
- 変更されていないターゲットに戻ります。
- 結合方向を確認してください。
- 明示的にのみ早送りを要求します。
- ラベルを既存の子孫に移動します。
- グラフの形状だけでなく、同一性も検証します。
- 発散したターゲットを維持する 強制するのではなく。
- 何が必要ですか?
- 名前や肌の色ではなく、祖先、 早送りを決定します。
- 何が変わるのでしょうか?
- ターゲットは次の場所に移動します 既存のDをプッシュせずに。
- 結果のターゲット SHA?
- 測定されたターゲットは以下に等しい 前の機能ヒント。
- 独立したターゲットコミットが追加されました: ff のみ?
- 発散は違反します 祖先ゲートが必要です。
- M 老人には 2 人の両親がいます。 このアクションが結合されたことを証明しますか?
- M の既存の祖先はそうではありません。 このアクションからの新しいコミット。
- 完了を証明するものは何ですか?
- 参照 ID と ファイルの状態は必須です。
- 実際の結果を検証してみると、 単なるメッセージではありません。
- 行動する前に、変更された入力を予測します。
- リカバリする前に有用な作業を保存します。
- 続行する前にチェックポイントを証明してください。
- 検証結果を保存する 次のステップのために。