コンテンツにスキップ
GitTree

レッスン 19 · 歴史と統合

早送りマージを理解する

別のコミットを作成せずに、ターゲット ブランチを既存の子孫ダーク パレット コミットに移動します。この早送りを、拒否する必要がある分岐入力と比較してください。

このブラウザに進行状況が保存されました。

再生すると、YouTube からビデオが読み込まれます (プライバシー強化モード)。

英語ナレーション · English and Arabic 件のキャプション

動画ページを開く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 — ダーク

ファイルの抜粋 · 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);正確な名前のコマンドを入力して選択します。名前付き参照アクションは、引数のないパレット ショートカットではなく、その行のコンテキスト メニューを使用します。

  1. 以下のように、シナリオ/ff-target と feature/dark-mode を別のコピーに準備します。機能の DARK を完全に節約します。
  2. 特技としてstyles.cssのみをコミット: ダークパレットを追加します。機能 D を確認します。
  3. [ローカル] で scenario フォルダを開き、ff-target → Checkout scenario/ff-target を右クリックします。まだ M であり、クリーンであることを確認します。
  4. [ローカル] で feature フォルダを開き、dark-mode → Merge feature/dark-mode into scenario/ff-target を右クリックします。ダイアログでソースとターゲットを確認します。
  5. Record it as で Fast-forward only を選択します。 「常にマージコミット」を選択しないでください。
  6. 「一度結合」を選択して待ちます。ターゲット ラベルが既存の D に到達すると予想されます。
  7. ターゲットと機能の実際の完全な SHA を比較し、DARK とクリーンな作業を検査します。
  8. 別の分岐コピー (新しいタブと最近のリポジトリから開きます) で、早送りのみでマージを繰り返します。アプリは拒否し、ターゲットにまだ行っていない変更があると表示します。正規のオリジナルはそのままにしておきます。

すべての通常のコミット: 概要が記載された主題です。説明が空です。以前のコミットを修正し、フックをスキップし、サインオフ者を追加し、別の作成者を追加し、コミット後にプッシュし、空のコミットをオフに許可します。共著者はいません。指定したファイルのみをステージングし、N 個のファイルへの変更を 1 回コミットする (1 つのファイル)、または代わりに Command+Enter を押します。本当の結果を待ちましょう。明示的に修正するレッスンでは、指定されたオプションのみが変更されます。

ターミナル内

レッスン 18 の結果の別のコピー:

Command · bash
git switch --create scenario/ff-target
git switch --create feature/dark-mode

完全な DARK スタイルシートを style.css の上に置き、次のようにします。

Command · bash
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 --short

SHA クエリは 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 は変更されません。

よくある間違い

  • 任意のグラフィカル行を呼び出すと、新しいマージ コミットが結合されます。
  • 代替ペインを元のチェックポイントとして扱います。
  • アプリが成功した後、完了したミューテーションを繰り返します。

何か問題が発生した場合

拒否された場合は、両方の履歴を検査し、確認後にのみ別のマージ/リベース ワークフローを選択します。拒否自体はターゲット ファイルや参照を変更しません。

理解度を確認してください

各質問に答えてから、その理由を読みましょう。 「必須」とマークされた質問は、レッスンの完了にカウントされます。

  1. 質問 1 / 6

    何が必要ですか?

    答えを 1 つ選択してください。

  2. 質問 2 / 6

    何が変わるのでしょうか?

    当てはまるものをすべて選択してください。

  3. 質問 3 / 6
    必須

    結果のターゲット SHA?

    答えを 1 つ選択してください。

  4. 質問 4 / 6
    必須

    独立したターゲットコミットが追加されました: ff のみ?

    答えを 1 つ選択してください。

  5. 質問 5 / 6

    Old M には 2 人の親がいます。このアクションがマージされたことを証明しますか?

    答えを 1 つ選択してください。

  6. 質問 6 / 6
    必須

    完了を証明するものは何ですか?

    当てはまるものをすべて選択してください。

6 個中 0 個が正解です

必須の質問に正しく答えると、レッスンを完了できます。

このブラウザで確認しました。

練習する

ターゲットチップが既存の D に等しいこと、および作業が完全な DARK に一致することを証明します。独立したターゲットが別のコピーでコミットされた後の拒否を予測します。拒否後に古い参照を比較します。

あなた自身の確認: サイトはあなたのコンピュータを認識できません。

レッスンを完了するには、必須の質問に正しく答え、実践的な演習を確認してください。

要約

  • 先祖関係により早送りが可能です。
  • 受信したコミットはその ID を保持します。
  • ffのみは発散を拒否します。

用語集の用語の紹介

早送り — تقديم سريع;子孫 — تابع;祖先 — سلف.

ビデオトランスクリプト

ビデオのナレーションが次々と流れます。

トランスクリプトを表示する
  1. 正確なチェックポイントから開始します。
  2. ブランチとインデックスに名前を付けます そして作業バージョン。
  3. 分離されたコースのコピーのみを準備します。
  4. 両方のブランチ名を開始します 同じコミットで。
  5. 実際のパレットの変更を記録します。
  6. 変更されていないターゲットに戻ります。
  7. 結合方向を確認してください。
  8. 明示的にのみ早送りを要求します。
  9. ラベルを既存の子孫に移動します。
  10. グラフの形状だけでなく、同一性も検証します。
  11. 発散したターゲットを維持する 強制するのではなく。
  12. 何が必要ですか?
  13. 名前や肌の色ではなく、祖先、 早送りを決定します。
  14. 何が変わるのでしょうか?
  15. ターゲットは次の場所に移動します 既存のDをプッシュせずに。
  16. 結果のターゲット SHA?
  17. 測定されたターゲットは以下に等しい 前の機能ヒント。
  18. 独立したターゲットコミットが追加されました: ff のみ?
  19. 発散は違反します 祖先ゲートが必要です。
  20. M 老人には 2 人の両親がいます。 このアクションが結合されたことを証明しますか?
  21. M の既存の祖先はそうではありません。 このアクションからの新しいコミット。
  22. 完了を証明するものは何ですか?
  23. 参照 ID と ファイルの状態は必須です。
  24. 実際の結果を検証してみると、 単なるメッセージではありません。
  25. 行動する前に、変更された入力を予測します。
  26. リカバリする前に有用な作業を保存します。
  27. 続行する前にチェックポイントを証明してください。
  28. 検証結果を保存する 次のステップのために。