レッスン 5 · 基礎
目的のスナップショットをステージングし、最初のコミットを行います
Create the project's README and hero page inside GitTree, select what belongs in the first commit, and deliberately leave a later edit uncommitted.通知だけで成功を判断するのではなく、記録された内容を証明してください。
- レベル: 初心者
- 6 分で読みました
- 7 分の動画
- 更新されました
- このレッスンの前に: 次のコミットに何が含まれるかを予測する, コースリポジトリを作成し、クローンとオープンを区別します
このブラウザに進行状況が保存されました。
再生すると、YouTube からビデオが読み込まれます (プライバシー強化モード)。
何を学ぶか
- 最初の 2 つのプロジェクト ファイルを GitTree に作成して保存します。
- どちらの操作も作業ファイルの削除と混同することなく、ステージングとステージング解除を行うことができます。
- コミットする前にインデックスを作業ツリーと比較します。
- 有用な概要を作成し、準備されたスナップショットのみをコミットします。
- 最初のコミットのファイル、ID、および残りの作業変更を確認します。
始める前に
レッスン 4 が終了したところから開始します。 original gittree-features は、コミット、プロジェクト ファイル、リモートを持たない、未誕生の main 上の通常のリポジトリです。そのローカル ID は GitTree Demo/demo@example.com です。レッスン 4 の補足 gittree-features-copy 内には続行しないでください。
GitTree の検査された最小値は Git 2.39.0 です。 The video was recorded with Git 2.52.0 and GitTree 2.0 on Ubuntu 24.04: the two files, their staging and the first commit were made in the app itself, and the terminal checks ran against what the app created or against separate copies of the project in states A, B and C, so the original was never replayed. macOS または Windows では何も実行されず、記録された Linux システムは Ubuntu のみです。コマンド キーと Windows コードはキーマップ ソースから取得されます。
ネイティブ Git にはローカル コミット用のアカウントは必要ありません。 GitTree でサインインすると、無料プランでこのレッスンがカバーされます。プロバイダー、プロ/トライアル、AI 製図、API キー、CI ランナー、クラウド環境は必要ありません。ローカルコミットを行うためにリモートを追加しないでください。
コンセプト:コンテンツを選択し、記録する
コミットは「表示されているものをすべて保存する」わけではありません。このレッスンでは、通常のコミットにより index: 選択された完全なスナップショットが記録されます。ルートコミットを作成し、それをメインポイントにします。どこにも押し付けません。
エディタで保存すると、working tree が更新されます。ステージングは、選択した作業ファイルからインデックスを更新します。アンステージするとインデックスの選択が変更されます。これは破棄ではなく、演習では作業ファイルを削除しません。最初のコミットの前には、復元する以前にコミットされたバージョンがないため、ステージングされていない新しいファイルは再び追跡されなくなります。
A prepared edition is a useful analogy: you can revise your working draft after preparing an edition, then publish the prepared edition locally without including the newer draft.ステージングは、後続の編集に対するライブ サブスクリプションではありません。 Git の追加リファレンス はその選択を文書化します。 コミット参照 は、通常のインデックスコミットを他のモードと区別します。
no -a、明示的なコミット パス引数、修正、空のコミット、または自動ステージオールを使用します。インデックスは、単なる変更された名前のリストではなく、次のツリー全体の説明です。
| 州 | Working index.html | Index index.html | HEAD/main | リモート |
|---|---|---|---|---|
| A: 保存された初期ファイル | HTML-01 | 欠席 | Unborn | なし |
| B: 両方のファイルがステージング済み | HTML-01 | HTML-01 | Unborn | なし |
| C: ステージング後に編集されたサポートライン | HTML-01-作業中 | HTML-01 | Unborn | なし |
| D: 通常のコミットは成功します | HTML-01-作業中 | HTML-01 | 最初のコミットには HTML-01 が含まれています | なし |
README-01 もステージングされ、コミットされます。 D 以降の README はクリーンです。 index.html は意図的に作業ツリー内でのみ変更されたままになります。グラフには、ステータスがクリーンでない間に新しいコミットが含まれる可能性があります。
プロジェクトファイルを完成させる
UTF-8、LF、および最後の改行を 1 つ使用します。保存されたファイルには Markdown フェンスを含めないでください。 package.json、CSS、JS、または実行可能な Node スイートはまだありません。これらはレッスン 6 で説明します。
README.md — README-01
# GitTree Features
A fictional landing page used to learn Git and GitTree.
All people and addresses in this repository are fictional.
No form submits information to a server.Index.html — HTML-01、ステージング前
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GitTree Features — course demo</title>
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand every change.</h1>
<p id="hero-copy">A clear view of Git history.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>Index.html — HTML-01-WORKING、ステージング後のみ
保存した作業ファイルを次の完全な本文に置き換えます after 以前のバージョンがインデックスに登録されています:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GitTree Features — course demo</title>
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand every change.</h1>
<p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>単一の意図された代替品は、ヒーローコピーのサポートラインです。メインの見出しやその他のバイトは変更しないでください。
GitTreeで
1. 2 つの初期ファイルを作成して保存します。
- 元のリポジトリの名前とメイン コンテキストを確認します。 Command Palette…、Command+Shift+P / Ctrl+Shift+P を開き、「New File…」と入力して、その正確なコマンド (
files.newFile) を選択します。フォルダー引数がない場合、プロジェクトのルートから開始されます。 - New File で、Path from the project folder を
README.mdに設定し、Create を選択します。新しい作業ファイルがファイル ワークスペースで開くことを期待します。作成では、既存のパスを上書きするのではなく、それを拒否します。 - 編集可能なコンテンツ領域にフォーカスし、完全な README-01 本文を貼り付けて、Save を選択します。代替案: Command+S / Ctrl+S (作業中のエディターにフォーカスがある場合)。実際に保存が成功すると、Unsaved changes インジケーターが消えることが予想されます。
- New File… → パス
index.html→ Create を繰り返します。後で動作するバリアントではなく、完全な HTML-01 を貼り付けます。保存して、未保存インジケーターが消えるまで待ちます。 - ファイル ツールバーで Back to Graph を選択するか、パレット コマンド Back to Graph (
view.returnToGraph) を選択します。次に、パレット Show Working Changes (wip.show) を使用します。 Unstaged Files の下には README.md とindex.html があり、Staged Files の下には何もないことが予想されます。 - 何もステージングされていないときに、Stage Changes to Commit がプライマリ コンポーザー ボタンである場合に注意してください。ソース定義のアクションは、all の作業変更を段階的に実行します。それはすでにコミットが成功したことを意味するわけではありません。代わりに、意図的なファイルごとのステージングを使用します。
エディターのバッファーの保存はステージングではありません。タブにファイルが表示されても、そのファイルの最新のバッファがディスクに到達したという証拠にはなりません。
2. ステージングし、安全にステージングを解除して、両方のファイルを準備します
- Unstaged Files の README.md の場合は、その Stage File 行アクションを使用します。キーボードによる代替方法: その行のみを選択し、ステージングされていないリストにフォーカスを当てたまま、S を押します。パレット コマンドは Stage (
wip.stageSelected) です。 Staged Files にある README.md を期待してください。 - 「Staged Files」の下の README 行で、「Unstage File」を選択します。キーボードによる代替方法: それだけを選択し、ステージングされたリストにフォーカスを当てたまま、U を押します。パレット コマンド Unstage (
wip.unstageSelected)。 README.md がステージングされていないファイルに戻ることが予想されます。動作内容はそのまま残ります。 - README.md を再度ステージングし、次に Stage File アクションを使用してindex.html をステージングします。ステージングされたファイル パスは正確に two 個であることが予想されます。
- 段階的に追加された各行をクリックして、追加が完了したことを確認します。 index.html には引き続き A clear view of Git history. が含まれている必要があります。ファイル数だけから内容を推測しないでください。
1 文字のショートカットはリストに限定されており、エディターや概要に S/U を入力する必要はありません。ドラッグ アンド ドロップによるステージング動作は想定されていません。
3. 後の編集をステージングせずに保存する
- Show Files (
files.focus)、Command+Shift+E / Ctrl+Shift+E を開きます。ファイル ツリーでindex.htmlにフォーカスし、Enter を押して作業コピーを開きます。別の方法: 既存の保存済み作業ファイル タブをクリックします。履歴 BLOB や段階的な差分ではなく、編集可能な File ビューで作業します。 - コンテンツ全体を上記の HTML-01-WORKING に置き換えます。 Save または Command/Ctrl+S で保存します。実際のディスク保存が成功するまで待ちます。
- Back to Graph を経由して戻り、その後 Show Working Changes に戻ります。 index.html が both リストに表示されるようになりました。その「Unstaged Files」行をクリックします。差分には、後のサポート行の置換が表示されます。
- その Staged Files 行をクリックします。first-commit の追加には以前のサポート行がまだ含まれています。新しい作業編集のステージ ファイルを not 選択するか、今すぐ Stage All Changes してください。そうなると、準備しているコミットが変更されてしまいます。
4. メッセージを書き込み、インデックスをコミットします。
- コンポーザー Summary フィールド (プレースホルダー Commit summary) に、
feat: add the GitTree Features heroを正確に入力します。 Description は空のままにしておきます。この概要では、何が変更されたのかを説明します。サイトの完成やテスト スイートの合格を約束するものではありません。 - Amend Previous Commitをオフにしておいてください。 Commit Options を展開し、Skip Hooks (--no-verify)、Add Signed-off-by、Different Author、Push After Commit、および Allow Empty Commit がすべてオフになっていることを確認します。共著者を追加したり、AI ドラフトを呼び出したりしないでください。
- 2 つの段階的なパスと、以前に準備したヒーロー ラインを最後にもう一度確認してください。 Commit Changes to 2 Filesを選択します。キーボードによる代替: Command+Enter / Ctrl+Enter。アクティブなリポジトリと保留状態を確認した後にのみ、パレット コマンド Commit (
commit.submit) を通じてルーティングされます。 - Git の実際の結果を待ちます。成功した結果は、測定された SHA を参照します。作成された SHA を図からコピーしないでください。メインでの最初のグラフのコミットが期待されます。この変更なしの送信の場合、メッセージの下書きは成功後にクリアされます。
- コミット後のリストを検査します。ステージングされたものは何も残っていません。 index.html は、後の行とともに Unstaged Files の下に残ります。この意図的な結果を「終了」するには、not をクリックして「変更をコミット」をクリックします。
表示されるファイル数は、2 つのリストにわたる 3 行ではなく、2 段階のパスです。コミット後のプッシュは別のフォローアップの選択肢です。オフになっており、リモコンがありません。
ターミナル内
<course-parent>/gittree-features で実行し、プレースホルダーを予約された実際の親に置き換えます。すでにアプリのミューテーションを実行している場合は、inspect its resulting state。同等の突然変異を再生して誤ってチェックポイントを超えて進まないようにしてください。
ステージング前の保存されたファイル
git status --short観察された内容:
?? README.md
?? index.htmlステージングされたコンテンツを使用せずに通常のコミットを意図的に試行します。
git commit --quiet -m "feat: add the GitTree Features hero"終了 1 で stdout が観察されましたが、stderr はありません:
On branch main
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
index.html
nothing added to commit but untracked files present (use "git add" to track)コミットは作成されませんでした。この否定的なケースは、ファイルの選択が重要である理由を説明しています。空のコミットを使用してバイパスしないでください。
ネイティブのステージ/アンステージ相当物
同じ保存されたファイルの状態を別個に再生すると、次のようになります。
git add -- README.md
git rm --cached --quiet -- README.mdどちらのコマンドもサイレントに成功しました。 --cached は必須です。インデックス not the working file から新しいエントリを削除します。チェックされた README バイトは変化せず、ショート ステータスで 2 つの追跡されていないファイルが再び示されました。これは具体的には、コミットされていない新しいファイルの例です。 do not generalize it to deleting tracked project files.
両方を準備します。
git add -- README.md index.html
git status --short
git diff --cached --stat観察されたステータス:
A README.md
A index.html観察された要約:
README.md | 6 ++++++
index.html | 21 +++++++++++++++++++++
2 files changed, 27 insertions(+)統計の概要では、正確さではなく行数がカウントされます。コミットする前に、実際にステージングされたコンテンツを確認してください。
後の作業編集を保存した後
git status --short
git diff -- index.html観察されたステータス:
A README.md
AM index.html観察された動作差分:
diff --git a/index.html b/index.html
index 5470374..27f8718 100644
--- a/index.html
+++ b/index.html
@@ -13,7 +13,7 @@
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand every change.</h1>
- <p id="hero-copy">A clear view of Git history.</p>
+ <p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>これらは、架空のコミット SHA ではなく、正確な LF コンテンツから測定されたファイル BLOB 略語です。短いステータスの間隔と省略形の長さは、書式設定の構成によって異なる場合があります。 2 つの比較は同じままでなければなりません。
準備されたファイルを正確に読み取ります。
git show :index.html観察された完全な出力:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GitTree Features — course demo</title>
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand every change.</h1>
<p id="hero-copy">A clear view of Git history.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>コミットして検証する
ネイティブ再生のみで、後の編集を再ステージングしません。
git commit --quiet -m "feat: add the GitTree Features hero"観察: 出力なし、0 を終了します。 This fixture had no active hooks/signing and only the fictional local identity.チュートリアルを強制的に成功させるために、実際のプロジェクトのフック/署名を無効にしないでください。
ネイティブまたは実際のアプリの結果を検査します。
git log -1 --format="%s%n%an <%ae>%n%cn <%ce>"
git rev-list --count HEAD
git ls-tree --name-only HEAD
git status --short
git diff --cached
git remote最初の 4 つのコマンドの出力を順番に観察します。
feat: add the GitTree Features hero
GitTree Demo <demo@example.com>
GitTree Demo <demo@example.com>
1
README.md
index.html
M index.html最後の 2 つのコマンドはそれぞれ no output and exited 0 を生成しました。作業中の編集は残ります。リモコンが存在しません。これはローカルでの最初のコミットであり、アップロードではありません。
For independent content confirmation, git show HEAD:index.html returned the full HTML-01 body displayed above as the prepared output; git diff -- index.html は依然としてサポートラインの正確な置き換えを示していました。インデックスは両方のパスの HEAD と一致しました。新しいファイルは失われませんでした。
結果
このレッスンの最後では、main は、宣言された概要と架空の作成者/コミッターを含む 1 つのコミットを指します。 HEAD とインデックスには README-01 と HTML-01 が含まれます。 workingindex.html には HTML-01-WORKING が含まれています。 Status has a leading space then M for index.html.リモコンはありません。
このチェックポイントをレッスン 6 に渡す前に、意図的な編集を「クリーン」したり、2 回目のコミットを作成したり、ルートを修正したり、オプションの練習ノートブックを追加したりしないでください。その後のクリーン継続ノートブックは、この 2 ファイルの最初のコミットではなく、別個に保存されたバリアントに属します。
よくある間違い
- Saving without staging: ディスク バイトと選択されたコミット バイトが異なります。
- Staging again after the deliberate edit: は有効な Git 動作ですが、新しい行がコミットに入り、このレッスンの結果が変わります。
- Counting all visible rows as staged files: 1 つのパスには、ステージングされた比較とステージングされていない比較を含めることができます。
- Using Stage All Changes as a final cleanup: 意図的に省略された編集が選択されます。
- Enabling amend or automatic push: これらはスコープが異なる異なる操作です。
- Calling unstage Discard: はインデックス選択の編集をステージング解除します。 [破棄] では、作業中のコンテンツを削除できます。
何か問題が発生した場合
新しいファイルが既存のパスを拒否した場合は、キャンセルして検査します。不明なコンテンツを上書きしないでください。エディタがディスクが変更されたと報告した場合は、両方のバージョンを保持し、実際の状態に応じてその Review Changes、Reload from Disk、または Keep Editing コントロールを使用します。やみくもに Overwrite with My Edits を選択しないでください。
何もステージングされていないためにコミットがブロックされている場合は、目的のファイルを選択して確認してください。 ID が見つからない場合は、レッスン 4 のローカル設定を調べます。失敗した試行では、明示的なリポジトリ ターゲットを指定して Set up your Git identity を提供できます。これはグローバル ID の書き込みを正当化するものではなく、ID を保存してもコミットが自動的に成功したことを意味するものではありません。
Git がコミットを拒否するかフックが失敗する場合は、利用可能な場合は Hook Output を読んでください。ソース定義の拒否テキストは The commit was not created. Your message and staged changes are unchanged. です。示された原因を修正し、再試行する前にインデックスを再確認してください。グリーン テイクを作成するためだけにスキップ フックにチェックを入れないでください。結果が不確かな場合は、再送信する前に実際の HEAD を再確認してください。
予期しない内容でコミットが作成された場合は、停止して実際の SHA、動作/インデックス状態、およびメッセージを記録します。すぐに修正、リセット、または「破棄」をクリックしないでください。ここで構成を変更しても、そのコミットに既に保存されているメタデータは変更されません。
理解度を確認してください
各質問に答えてから、その理由を読みましょう。 「必須」とマークされた質問は、レッスンの完了にカウントされます。
6 個中 0 個が正解です
必須の質問に正しく答えると、レッスンを完了できます。
このブラウザで確認しました。
練習する
完成したオリジナルに対して記事のステータス/コンテンツのクエリを使用します。 1 つのコミットと残りの作業中の変更が両方とも正しい理由を説明してください。準備されたファイルを読む前に、予測を記録します。
separate disposable replay only の場合は、コミットする前に、後で編集したindex.html をステージングします。新しい行が記録され、ステータスがクリーンになると予測します。この代替方法を実行するために元のファイルを変更しないでください。ブラウザーの演習がまだ存在しない場合は、2 つのトランスクリプトを使用して、さまざまな結果を説明します。
あなた自身の確認: サイトはあなたのコンピュータを認識できません。
レッスンを完了するには、必須の質問に正しく答え、実践的な演習を確認してください。
要約
- 保存すると作業ファイルが変更されます。ステージングは、次の通常のコミットのコンテンツを選択します。
- 最初のコミットはインデックスを記録し、プッシュせずにローカルのメインに進みます。
- 内容、身元、残りの作業を個別に検証します。ダーティな結果は意図的なものである可能性があります。
関連している
用語集の用語の紹介
ステージ — تجهيز;アンステージ — إلغاء التجهيز;コミット — إيداع;インデックス — 番号;ワーキングツリー — مجلد العمل;追跡されていません — 追跡されていません。著者 — ヤステル;コミッター — المُودِع。 Discard は「التخلّص من التغييرات」を意味し、ステージ解除とは異なります。
ビデオトランスクリプト
ビデオのナレーションが次々と流れます。
トランスクリプトを表示する
- ヒーローを作成し、エディションを 1 つ用意し、 そして、最初のコミットが何を保存したかを証明します。
- 元のリポジトリから開始します L004、その補足クローンではありません。
- 保存、ステージング、コミット 別のスナップショットを変更します。
- 最初のファイルを作成します GitTree の新しいファイル コマンド。
- README dot em という名前を付けます。 dee、プロジェクトのルートにあります。
- 架空のプロジェクト全体を保存する Markdown フェンスではなく README。
- インデックスドット作成 H T M L 同じリポジトリ内にあります。
- オリジナルヒーローを救え このサポートラインで。
- 作業上の変更を開いて確認してください どちらも追跡されていない新しいファイルです。
- 何も演出されていないのに、これは ボタンの段階ですべての変更が最初に行われます。
- 端末は2つを確認します 2 つのコミットではなく、追跡されていないファイルです。
- 通常のコミットではこれらを記録できません ファイルの内容を選択する前に、ファイルを削除してください。
- 最初に README だけをステージングします。
- 再度ステージングを解除します。保存されました 作業中のテキストはそのまま残ります。
- アンステージでは選択範囲が変更されます。 [破棄] では、作業中のコンテンツを削除できます。
- 次に、目的の両方のファイルを 1 つずつステージングします。
- S および U ショートカットは、 テキストフィールド内ではなく、フォーカスされたリスト。
- ステージングされたコンテンツを確認し、 ファイル数だけではありません。
- 概要では行数がカウントされます。それはあります これらの行が正しいことを証明するものではありません。
- 準備版は、 まだオリジナルの主人公です。
- 作業ファイルを再度開きます。 段階的な比較ではありません。
- 後のサポートを保存します ステージングなしのライン。
- 同じパスが表示されます 両方の比較において。
- ステージングされていない比較では、次のことがわかります。 後でインデックスに対して編集します。
- 段階的追加はまだ 前の行が含まれています。
- インデックスを直接読み取る 準備されたものを証明するため。
- 再びステージングすることなく、それをサポートします 最初のコミットには行が含まれますか?
- 説明する要約を書きます 実際に追加したヒーロー。
- 修正を維持し、すべてのオプションの動作を維持します この最初のローカルコミットではオフになります。
- 2 段階のパスをコミットします。 表示されているすべての行ではありません。
- Git が作成を確認するまで待ちます。 操作が完了したものとして扱います。
- Main は最初のローカル コミットをポイントするようになりました。
- その後の作業中の編集が残ります 意図的にコミットの外で。
- 件名、著者を確認する そしてコミッターは独立して。
- を含むコミットが 1 つあります まさにこの 2 つのパスです。
- 空のキャッシュされた diff は共存可能 実用的な修正を加えたもの。
- 記録されたファイルは以前のものです。の 作業ファイルにはまだ新しい行が含まれています。
- 何もアップロードされていませんでした。これ リポジトリにはまだリモートがありません。
- 後の編集を先にステージングすると、 準備されたエディションが変更されます。
- その代替コミットは、 新しい行ときれいな結果を残します。
- コミットショートカットも代替手段です 提出であり、第 2 の仕上げステップではありません。
- Git が拒否した場合は、その出力を調べて、 再試行する前にステージングされたコンテンツ。
- 残った編集内容は破棄しないでください または、「元に戻す」ですべてのバッファがカバーされると仮定します。
- チェックポイントは 1 つの正確なコミットです 加えて、意図的な作業編集が 1 つあります。
- 録音内容、本人確認を確認する と残りの作業を別々に行います。
- 保存すると作業ファイルが書き込まれます。 ステージング選択。記録をコミットしています。
- 後で編集したものを保存します。次に検査します diff を取得し、プロジェクトのツールを追加します。
- この検証済みの状態から続けて、 推測されたクリーンなフォルダーからのものではありません。