レッスン 27 · 回復
リセット: ソフト、ミックス、ハード
3 つの方法でブランチを 1 コミット分戻して、各モードがブランチ、ステージング領域、ファイルにどのような影響を与えるかを確認して、必要な作業を維持できるモードを選択します。
- レベル: 上級者向け
- 5 分で読みました
- 6 分の動画
- 更新されました
- このレッスンの前に: 次のコミットに何が含まれるかを予測する, HEADを移動せずに履歴を読み取る
このブラウザに進行状況が保存されました。
再生すると、YouTube からビデオが読み込まれます (プライバシー強化モード)。
何を学ぶか
- 各リセット モードで何が移動するかを説明します。ブランチ、インデックス、ディスク上のファイルです。
- 破壊的モードになる前に、コミットされた作業とコミットされていない作業を保護します。
- 各モードが残すステータス出力を読み取ります。
- 追跡されていないファイルも含め、ハード リセットによって上書きできるファイルを把握します。
始める前に
あなたは private/reset にいます。これは、レッスン 18 (「作業内容を明確に表示する」) の統合されたページ M から始まるブランチです。 M、C の上に 1 つのコミットがあり、見出しが「自信を持って変更を確認する」に変更されます。ブランチ rescue/before-reset はすでに C を指しています。コミット後、「保存された各変更を理解する」ためにページを再度編集しましたが、まだステージングもコミットもしていません。追跡されていないメモ docs/signup-hint.md もあります。 private/reset を M に戻したいと考えています。
すべてがローカルであり、無料プランです (GitTree はサインインを要求します)。ホスティング アカウント、プロバイダー、インターネットはありません。すべてのアイデンティティは架空のものです (example.com)。このレッスンを実際のプロジェクトで実行しないでください。ハード リセット コピーは使い捨てです。
変更は、GitTree 内で行うか、ネイティブ Git コマンドを使用して行います。同じコピー内で両方を行うことはできません。結果の読み取りは常に安全です。メニュー ラベルは GitTree 2.0 独自の文字列から取得され、ネイティブ コマンドは使い捨てコピーの Git 2.43 で実行されました。 GitTree ステップは macOS、Windows、または Linux で実行されませんでした。
概念と状態の効果
リセットすると、現在のブランチが別のコミットに移動します。どれだけ触れるかはモードによって決まります。 Soft はブランチのみを移動します。インデックスとファイルは元のままであるため、違いは段階的な変更として現れます。 Mixed はブランチを移動し、インデックスをターゲットに置き換えます。ファイルはそのまま残るため、違いはステージングされていない変更として表示されます。 Hard はブランチを移動し、インデックスを置き換えて、追跡されているファイルをターゲットに書き換えます。追跡されたファイルに対するコミットされていない編集内容は失われます。
レスキュー ブランチはコミット C を保持するため、コミットされた見出しを再度見つけることができます。コミットされていない新しい編集は保持されません。コミットはreflogを通じて見つけることができます。未保存の編集は Git に存在したことがないため、保存できません。破壊的なモードになる前に、自分で保護してください。
ターゲットの同じパスに追跡対象ファイルがある場合、ハード リセットは追跡対象外のファイルも上書きします。ここの docs/signup-hint.md のように、邪魔にならない追跡されていないファイルはそのまま残されます。これはこのプロジェクトに関する見解であり、追跡されていないすべてのファイルについて約束するものではありません。
3 つのモードすべてにおいて、ブランチは移動する唯一の参照です: rescue/before-reset、他のブランチとサーバー上のすべてのものはそのまま残ります。
GitTreeが最初に尋ねます。リセット ダイアログには何が残るかが表示され、ハード リセットの場合は、削除したものはすべて最初に refs/ogt/trash に保存されるため、[元に戻す] で復元できると表示されます。ターミナルでリセットを実行しても、そのようなスナップショットは作成されません。
正確なプロジェクトの状態を準備する
レッスン 18 のマージ結果 M の別の通常のコピーから開始し、オリジナルはそのままにしておきます。ブランチを作成し、SARA を見出しコミットとして保存し、そこにレスキュー参照をブランチします。次に、ステージングされていない OMAR と DOC_HINT を新しいファイルとして保存します。 OMAR とメモのコピーを Git の外部に保存し、同じコピーを 3 つ作成します (ソフト、混合、ハード用に 1 つずつ)。
完全なファイル入力
以下のフェーズでのみ保存します。これらは、最後に改行を含む完全な UTF-8/LF 本文です。 Markdown フェンスは決して貼り付けないでください。変更されていない実行可能ファイルは、名前付き入力を継承します。別のバリアントのバージョンでオリジナルを上書きしてはなりません。
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>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main" tabindex="-1">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">See your work clearly.</h1>
<p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
<section class="features" aria-labelledby="features-title">
<h2 id="features-title">Follow your work</h2>
<div class="cards">
<article class="feature-card">
<h3>History</h3>
<p>Read commits and branches together.</p>
</article>
<article class="feature-card">
<h3>Changes</h3>
<p>Review the exact content selected for a commit.</p>
</article>
<article class="feature-card">
<h3>Recovery</h3>
<p>Inspect the scope of a recovery point before using it.</p>
</article>
</div>
</section>
<section aria-labelledby="plans-title">
<h2 id="plans-title">Choose the workflow you need</h2>
<div class="cards">
<article class="feature-card">
<h3>Local Git</h3>
<p>Local Git workflows work without signing in.</p>
</article>
<article class="feature-card">
<h3>Connected workflows</h3>
<p>Provider integrations and Nour require Pro or an applicable trial.</p>
</article>
</div>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
<script type="module" src="site.js"></script>
</body>
</html>インデックス.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>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main" tabindex="-1">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Review changes with confidence.</h1>
<p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
<section class="features" aria-labelledby="features-title">
<h2 id="features-title">Follow your work</h2>
<div class="cards">
<article class="feature-card">
<h3>History</h3>
<p>Read commits and branches together.</p>
</article>
<article class="feature-card">
<h3>Changes</h3>
<p>Review the exact content selected for a commit.</p>
</article>
<article class="feature-card">
<h3>Recovery</h3>
<p>Inspect the scope of a recovery point before using it.</p>
</article>
</div>
</section>
<section aria-labelledby="plans-title">
<h2 id="plans-title">Choose the workflow you need</h2>
<div class="cards">
<article class="feature-card">
<h3>Local Git</h3>
<p>Local Git workflows work without signing in.</p>
</article>
<article class="feature-card">
<h3>Connected workflows</h3>
<p>Provider integrations and Nour require Pro or an applicable trial.</p>
</article>
</div>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
<script type="module" src="site.js"></script>
</body>
</html>インデックス.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>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main" tabindex="-1">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand each saved change.</h1>
<p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
<section class="features" aria-labelledby="features-title">
<h2 id="features-title">Follow your work</h2>
<div class="cards">
<article class="feature-card">
<h3>History</h3>
<p>Read commits and branches together.</p>
</article>
<article class="feature-card">
<h3>Changes</h3>
<p>Review the exact content selected for a commit.</p>
</article>
<article class="feature-card">
<h3>Recovery</h3>
<p>Inspect the scope of a recovery point before using it.</p>
</article>
</div>
</section>
<section aria-labelledby="plans-title">
<h2 id="plans-title">Choose the workflow you need</h2>
<div class="cards">
<article class="feature-card">
<h3>Local Git</h3>
<p>Local Git workflows work without signing in.</p>
</article>
<article class="feature-card">
<h3>Connected workflows</h3>
<p>Provider integrations and Nour require Pro or an applicable trial.</p>
</article>
</div>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
<script type="module" src="site.js"></script>
</body>
</html>docs/signup-hint.md — DOC_HINT
Unfinished signup hint: use fictional data only.GitTreeで
Command+Shift+P (Ubuntu では Ctrl+Shift+P) でパレットを開きます。リセットは、コミットの右クリック メニューのサブメニュー Reset private/reset to This Commit の下にあります。
- 次のセクションで示すように、ブランチ、レスキュー参照、ステージングされていない編集、およびメモを構築します。編集内容とメモのコピーを Git の外に保管します。同一のコピーを 3 つ作成し、3 つのタブで開きます。
- Soft copy. グラフで M (ブランチ チップではなく C の下のコミット) を右クリックし、Reset private/reset to This Commit を開きます。 Soft: Keep All Changes Stagedを選択します。確認ダイアログには、それ以降のすべての変更はステージングされたままであり、ファイルは変更されていないと表示されます。 Reset private/resetを選択します。
- ソフト結果を確認してください。ブランチは M にあり、ディスク上のページには「保存された各変更を理解します。」と表示されたままで、ステージングされたリストとステージングされていないリストの両方に
index.htmlが保持されています。 - Mixed copy. M で Mixed: Keep Changes in the Working Folder を選択します。ダイアログには、すべての変更がステージングされずに作業コピーに残ることが表示されます。 Reset private/resetを選択します。ブランチは M 上にあり、ディスク上のページは同じ編集であり、変更はステージングされていないだけです。
- Hard copy. 編集内容とメモを別の場所に保存した後でのみ、M で Hard: Discard All Changes… を選択してください。ダイアログは警告です。削除されたものがリストされ、最初に
refs/ogt/trashに保持されることが示されます。読んでみてください。デフォルトは「キャンセル」です。 Discard and reset private/resetを選択します。 - 厳密な結果を確認してください。ブランチは M にあり、ページは M の見出しであり、変更リストには追跡されていないメモのみが表示されます。通知には「リセット」とコミットが記載されています。
- 3 つのコピーと、まだ C 上にある
rescue/before-resetを比較します。いずれもプッシュしないでください。
ブランチがすでにオンになっているコミット、およびブランチがチェックアウトされていない場合、リセット コマンドは無効になります。
コース内のすべての通常のコミット: Summary は指定された件名、Description は空、オプション Amend Previous Commit、Skip Hooks、Add Signed-off-by、Different Author、Push After Commit、および Allow Empty Commit はオフのままです。
ターミナル内
レッスン 18 の結果の別のコピー:
git switch --create private/resetSARA を index.html として保存し、次のようにします。
git add -- index.html
git commit --quiet -m "feat: reset snapshot example"
git branch rescue/before-resetステージングなしで OMAR を index.html として保存し、DOC_HINT を docs/signup-hint.md として保存します。両方のコピーを Git の外部に保存し、同じコピーを 3 つ作成します。それぞれの場合:
TARGET_SHA="$(git rev-parse rescue/before-reset^)"ソフトコピーのみ:
git reset --quiet --soft "$TARGET_SHA"混合コピーのみ:
git reset --quiet --mixed "$TARGET_SHA"ハードコピーのみ、使い捨てコピーの場合:
git reset --quiet --hard "$TARGET_SHA"各コピーには次のように書かれています。
git rev-parse HEAD
git show :index.html
git status --shortすべての HEAD は M です。インデックスには、ソフトの後に SARA が保持され、混合およびハードの後に M のページが保持されます。ディスク上のファイルは、ソフトおよびミックス後は OMAR であり、ハード後は M's ページです。ステータスは次のとおりです。
ソフト:
MM index.html
?? docs/signup-hint.md混合:
M index.html
?? docs/signup-hint.mdハード:
?? docs/signup-hint.mdターミナルのリセットにより、GitTree のスナップショットは作成されませんでした。 git reflog には引き続き C がリストされていますが、OMAR はどこにもありません。別のバックアップされたラボでは、追跡された docs/signup-hint.md を持つコミットへのハード リセットにより、そのパスにある追跡されていないファイルが上書きされました。
結果
Where you end: 3 つのブランチはすべて M. Soft 上にあります。インデックスには SARA が保持され、ファイルには OMAR が保持されます。混合: インデックスは M を保持し、ファイルは OMAR を保持します。ハード: どちらも M を保持します。トラックされていないノートは各コピーに残り、rescue/before-reset は C のままです。
よくある間違い
- レスキュー ブランチを、コミットされていない新しい作業のバックアップとして扱います。
- 最初に編集を保存せずにハード リセットを使用してチェックアウトを整理します。
- ソフトリセットでは何もステージに残らないことが期待されます。
- すでにプッシュしたブランチをリセットし、それをチームメイトの作業の上にプッシュします。
何か問題が発生した場合
レスキュー参照を使用してコミットされた見出しを再度検索し、編集とメモ用の外部コピーを使用します。 GitTree では、アプリを通じて行われたハード リセットにより最初にスナップショットが保存されたため、[元に戻す] でスナップショットを復元できます。端末でリセットしてもリセットされませんでした。
理解度を確認してください
各質問に答えてから、その理由を読みましょう。 「必須」とマークされた質問は、レッスンの完了にカウントされます。
6 個中 0 個が正解です
必須の質問に正しく答えると、レッスンを完了できます。
このブラウザで確認しました。
練習する
各コピーで 3 回のリードバックを実行し、分岐のポイント、インデックスが保持しているもの、ファイルが保持しているものを表に記入します。次に、コミットのメッセージをやり直すためにどのモードを使用するか、すべてをステージング解除するか、すべてを破棄するかを指定します。
あなた自身の確認: サイトはあなたのコンピュータを認識できません。
レッスンを完了するには、必須の質問に正しく答え、実践的な演習を確認してください。
要約
- ソフトはブランチのみを移動します。
- Mixed ではインデックスもリセットされます。
- Hard ではファイルも書き換えられます。
関連している
用語集の用語の紹介
リセット — ログイン;ソフト — ナニ。混合 — ختلطة;難しい — كاملة;レスキューブランチ — فرع حفظ.
ビデオトランスクリプト
ビデオのナレーションが次々と流れます。
トランスクリプトを表示する
- ブランチを元に戻し、その量を選択します それ以外は変わります。
- ソフトはブランチを移動します。混合すると、 インデックス。ファイルをハード追加します。
- したがって、違いは段階的か、段階的ではないか、または 消えた。
- ビルドは 1 つのスタート: コミット、レスキュー ブランチ、保存されていない編集内容、およびメモ。
- 同じコピーを 3 つ作成し、次のように書きます。 M の ID をダウンします。
- 編集はコミットされませんでした。コピーを保管しておいてください Git の外。
- グラフはM、C、レスキューを示しています。 Cで分岐します。
- 「M」を右クリックし、「リセット」サブメニューを開き、 ソフトを選択します。
- ダイアログには、すべての変更がステージングされたままであると表示されます。 ファイルの変更はありません。
- 現在ブランチはMにあります。 C はまだ継続中です 救助支店。
- ステージングされたリストには古いコミットが含まれています。の ステージングされていないリストに編集内容があります。
- ディスク上のファイルには編集内容がまだ残っています。
- 混合コピー: 同じメニューで、「混合」を選択します。
- このダイアログでは変更が残っていることが示されていますが、 舞台化されていない。
- 現在、index.html はステージングされていないだけです。
- 編集内容はまだファイル内にあります。
- 難しくなる前に、編集内容とメモを保存してください どこか別の場所に。
- ハードコピー: ドットが付いているハードを選択します。 警告を意味します。
- ダイアログには削除されたものがリストされ、次のように表示されます。 最初に保存されます。デフォルトはキャンセルです。
- 破棄してリセットを選択します。
- メモだけが残っています。 Mさんのページです またまた。
- ターミナルでの最初の読み取りは、 コミットします。 3人ともMです。
- コロンを付けた git show はインデックスを読み取ります。 ソフトは古いページを保持します。
- ステータスはコピーごとに異なります。
- レスキュー ブランチはまだ古いバージョンにあります コミットします。
- そしてディスク上のファイル: 2 回編集しました、M さん 一度ヘディングします。
- 入力を変更します。外部コピーは使用せず、 ターミナルでは難しいです。
- reflog にはコミットがリストされます。保存されていない編集内容 そこにはどこにもありません。
- そして、次の場合、追跡されていないファイルをハード上書きします。 ターゲットにはそこに1つあります。
- ソフトでミックスしても何も失うものはありません。ハードで アプリが最初に保存されます。
- 練習: ブランチとインデックスのテーブルを埋める と各モードのファイル。
- 次に、何もせずに共有コミットを元に戻します。 履歴を書き換えて、元に戻します。