レッスン 30 · 回復
GitTree 元に戻す、やり直し、および回復スナップショット
GitTree のツールバーからコミットを元に戻したり、やり直したりして、アプリが何を取り消せるのか、何を取り消せないのか、いつ拒否されるのか、なぜ回復スナップショットを保持するのかを学びます。
- レベル: 中級者
- 2 分で読みました
- 6 分の動画
- 更新されました
- このレッスンの前に: リセット: ソフト、ミックス、ハード, reflog で失われたコミットを見つける
このブラウザに進行状況が保存されました。
再生すると、YouTube からビデオが読み込まれます (プライバシー強化モード)。
何を学ぶか
- 次の「元に戻す」または「やり直し」を押す前に、その操作で何が行われるかを読んでください。
- コミットを元に戻すと変更がステージングされたままになり、Redo でコミットを元に戻せると予測します。
- アプリが元に戻すまたはやり直しを拒否する理由を認識します。ブランチが移動した、ファイルが変更された、リモートが変更されたなどです。
- 回復スナップショットとは何か、古いスナップショットを意図的に削除する方法を理解します。
始める前に
あなたは、クリーンなワークツリーを持つレッスン 18 の結果 M からの分岐である private/undo-demo にいます。 GitTree の元に戻す機能は、それ自体が記録したステップから機能するため、1 つの小さなメモ docs/signup-recovery.md を作成し、それをコミットします through GitTree。ターミナルで行われたコミットは別のものであり、そのレコードには入りません。
すべてがローカルであり、無料プランです (GitTree はサインインを要求します)。ホスティング アカウント、プロバイダー、インターネットはありません。すべてのアイデンティティは架空のものです (example.com)。このレッスンを実際のプロジェクトで実行しないでください。
変更は、GitTree 内で行うか、ネイティブ Git コマンドを使用して行います。同じコピー内で両方を行うことはできません。結果の読み取りは常に安全です。メニューのラベル、ツールチップ、通知は、GitTree 2.0 独自の文字列とソースから取得されています。ネイティブ コマンドは、使い捨てコピーの Git 2.43 で実行され、アプリのレコードではなく、Git モデルのみが表示されます。 GitTree ステップは macOS、Windows、または Linux で実行されませんでした。
概念と状態の効果
GitTree は、実行するステップの journal を保持します。 「元に戻す」は最新のステップを元に戻し、「やり直し」は最後に元に戻したステップを繰り返します。ツールバーのツールヒントでは、ステップに「元に戻す: commit …」などの名前が付けられます。まず読んでください。期待したものと異なる名前が記載されている場合は、やめてください。
破壊的なステップの前に、GitTree は refs/ogt/trash/* の下に recovery snapshot を保存し、ジャーナル エントリを書き込みます。それ以降何も変更されていない場合にのみ、そのレコードから復元を元に戻します。ブランチは、ステップが終了した場所をまだ指している場合にのみ元に戻り、ファイルはその後誰も編集しなかった場合にのみ復元されます。それ以外の場合、元に戻すは理由を付けて拒否され、スナップショットが保持されます。
commit を元に戻すと、ブランチが元に戻り、コミットされた変更がステージングされたままになるため、何も失われません。そのコミットをやり直すと、ブランチが再び同じコミットに進みます。すべての手順をやり直すことができるわけではなく、一部の手順は元に戻すことができません。たとえば、強制的に押すとリモコンが変更されます (「もう一度押すと元に戻ります」)。削除されたスタッシュはスナップショットとして保存されますが、まだ元に戻されていません。一番最初のコミットにはそれ以前の状態はありません。途中で停止したステップには、元に戻す完全な結果はありません。
スナップショットはスケジュールに従って削除されません。コマンド Delete Old Recovery Snapshots… を使用すると、経過時間を選択し、どのスナップショットが古いかを正確に表示し、確認後にそれらのスナップショットのみを削除します。スナップショットを削除すると、そのステップへの戻り道が削除されます。
元に戻すとやり直しは、ローカル リポジトリのみを変更します。何も公開されていません。
正確なプロジェクトの状態を準備する
信頼できるレッスン 18 の結果 M の別の通常のコピーから開始し、オリジナルはそのままにしておきます。ブランチを作成し、メモを作成します。 DOC_LOST はメモの内容です。
完全なファイル入力
以下のフェーズでのみ保存します。これらは、最後に改行を含む完全な UTF-8/LF 本文です。 Markdown フェンスは決して貼り付けないでください。変更されていない実行可能ファイルは、名前付き入力を継承します。別のバリアントのバージョンでオリジナルを上書きしてはなりません。
docs/signup-recovery.md — DOC_LOST
# Recovered signup work
Keep a branch name before leaving useful experimental work.GitTreeで
Command+Shift+P (Ubuntu では Ctrl+Shift+P) でパレットを開きます。 Undo と Redo はツールバーとパレットにあります。ショートカットは、元に戻すには Command+Z、やり直しには Command+Shift+Z または Command+Y (Windows と Linux では Ctrl) です。
- 別のコピーでブランチ
private/undo-demoを作成し、DOC_LOST をdocs/signup-recovery.mdとして保存します。変更リストを開きます。ファイルは新しいものです。 - そのファイルのみをステージングし、概要
docs: demonstrate a reversible local commitを使用してコミットします。本当の結果を待ちましょう。 - ツールバーの Undo にカーソルを合わせます。ツールチップには「元に戻す: commit …」と表示されます。別のステップが指定されている場合は、停止します。意図していない操作を元に戻さないでください。
- Undo を 1 回選択してください。通知には「未完了: コミット」と書かれています。ブランチは M に戻り、メモは staged で、削除されていません。
- Redo にカーソルを置きます。ツールチップには「やり直し: commit …」と表示されます。 Redo を 1 回選択してください。通知には「Redid: commit」と書かれています。コミットが戻ってきて、ワークツリーがきれいになりました。
- Separate stale-state copy. 2 番目のコピーで、手順 1 ~ 4 を繰り返し、GitTree の外側で、
git commit -m "docs: external move after app undo"を使用してステージングされたメモを commit します。 Redo を見てください。無効になっています。その理由は「ブランチが移動したため、元に戻すとその変更が上書きされます。」です。無理強いしないでください。 - パレットを開いて Delete Old Recovery Snapshots… を実行します。 Older than (days) を 30 のままにして、Find を選択します。リストの内容を読んでください。「それほど古いスナップショットはありません。」または古いもののリスト。ダイアログを閉じます。レッスンを終了するために何も削除しないでください。
コース内のすべての通常のコミット: Summary は指定された件名、Description は空、オプション Amend Previous Commit、Skip Hooks、Add Signed-off-by、Different Author、Push After Commit、および Allow Empty Commit はオフのままです。
ターミナル内
端末はアプリのジャーナルを使用しません。これは、レッスン 18 の結果の different のクリーン コピーにある、コミットの取り消しの動作を示す単純な Git モデルです。
git switch --create private/undo-demo
BEFORE_SHA="$(git rev-parse HEAD)"DOC_LOST を docs/signup-recovery.md として保存し、次のようにします。
git add -- docs/signup-recovery.md
git commit --quiet -m "docs: demonstrate a reversible local commit"
AFTER_SHA="$(git rev-parse HEAD)"
git reset --soft "$BEFORE_SHA"
git status --shortA docs/signup-recovery.mdブランチが戻り、ファイルがステージングされます。再び前進します:
git reset --soft "$AFTER_SHA"
git status --shortステータスは空です。これらのコマンドは、not アプリの元に戻すまたはやり直しを呼び出し、GitTree ジャーナル エントリを記録するか、スナップショットを作成します。 git for-each-ref refs/ogt/trash はこのコピーには何も印刷しません。アプリで作成したテイクでは、実際のスナップショット名がリストされており、変更せずに読み取ることができます。
古くなったステップを防ぐ手段は比較交換です。 Git の update-ref にも同じ考え方があり、期待する値がまだ保持されている場合にのみ ref を移動します。外部コミット後:
git update-ref refs/heads/private/undo-demo "$AFTER_SHA" "$BEFORE_SHA"Git は「参照をロックできません…は…ですが、期待されています…」と拒否します。 GitTree 自身の拒否は、ツールヒントにある「ブランチはその後移動しました。元に戻すとその変更は上書きされます。」というものです。
結果
最初のコピーの Where you end: では、メモがコミット、取り消し (ステージング、M で分岐)、やり直し (コミットで分岐、ツリーがクリーン) されました。古いコピーでは、ブランチが移動し、外部コミットがそのまま残されたため、やり直しは拒否されました。スナップショット ダイアログを開いて、何も削除せずに閉じました。
よくある間違い
- ツールヒントを読まずに [元に戻す] を押し、意図しない手順を元に戻します。
- すべてのアクションは元に戻すかやり直すことができると仮定します。強制プッシュや削除されたスタッシュはそうではなく、ほとんどのステップにはやり直しがありません。
- 元に戻すには、GitTree の外部のエディタで行った編集が含まれることが期待されます。
- 古いスナップショットを削除して整理すると、元に戻す方法がなくなります。
何か問題が発生した場合
[元に戻す] が無効になっている場合は、ツールヒントで理由を読みます。ブランチが移動した、それ以降にファイルが編集された、リモートが変更された、または元に戻すものが何もないなどです。ステップが拒否された場合、その回復スナップショットは refs/ogt/trash/* に保存されます。確信がない間は削除しないでください。 GitTree の外側で行われたコミットの場合は、レッスン 29 の reflog を使用します。
理解度を確認してください
各質問に答えてから、その理由を読みましょう。 「必須」とマークされた質問は、レッスンの完了にカウントされます。
6 個中 0 個が正解です
必須の質問に正しく答えると、レッスンを完了できます。
このブラウザで確認しました。
練習する
[元に戻す] ツールチップの内容、[元に戻す] 後のブランチとステージングされたリストがどのようになったか、[やり直し] で何をしたかを書き留めます。古いコピーには、Redo が与えた理由を書きます。次に、アプリが元に戻せないステップを 1 つ挙げて、その理由を説明します。
あなた自身の確認: サイトはあなたのコンピュータを認識できません。
レッスンを完了するには、必須の質問に正しく答え、実践的な演習を確認してください。
要約
- 押す前にツールチップを読んでください。
- コミットを元に戻すと、その変更はステージングされたままになります。
- ブランチを移動したり、ファイルを編集すると、Undo が拒否されます。スナップショットが保存されます。
関連している
用語集の用語の紹介
元に戻す — 戻る;やり直し — 再実行;ジャーナル — ジャーナルリカバリ スナップショット — 回復スナップショット。
ビデオトランスクリプト
ビデオのナレーションが次々と流れます。
トランスクリプトを表示する
- GitTree は少し後退することができます。ここにあります どのように、そしてどこで止まるのか。
- GitTree は自身の歩数を記録します。 元に戻すと最新のものを元に戻します。
- 危険なステップに進む前に、回復を節約します まずはスナップショット。
- 支店ができて、新しいメモもできました。
- そのファイルのみをステージングします。
- 概要を書きます。すべてのオプションはそのままです オフ。
- GitTree 自体で 1 回コミットします。
- ターミナルで行われたコミットはこの中にはありません 記録する。
- ホバーして元に戻します。ツールチップにはステップの名前が表示されます。 コミットします。
- 別の名前が付けられている場合は、停止してください。
- 「一度元に戻す」を選択します。通知には元に戻すと書かれています コミットします。
- 支店はMに戻りました。
- そして、メモは削除されるのではなく、段階的に作成されます。 何も失われません。
- これで、Redo は同じコミットに名前を付けます。
- 「一度やり直し」を選択します。コミットが戻ってきました。
- ワークツリーが再びきれいになりました。
- 2 番目のコピーでは、コミットして元に戻します。 同じように。
- ステージングされたノートを外部にコミットします GitTree。
- やり直しは無効になっています。その後支店は移転しました。
- コミットはそのままになります。決して強制しないでください それ。
- その他の理由: ファイルの編集、リモート 変更された、最初のコミット。
- さて、スナップショットです。古いリカバリの削除を実行 スナップショット。
- リストされているスナップショットのみが表示されると言います。 削除されました。
- 30 日そのままにして、[検索] を選択します。
- 閉じてください。単独で期限切れになるものはありません。
- プレーンな Git コピーでは、ソフト リセットにより次のようになります。 同じ形。
- 再び前に進むと、木はきれいになり、 アプリのスナップショットはありません。
- Git は同じ方法で ref を保護します: 移動します それがあなたが期待するものを保持している場合にのみ。
- 元に戻すはグローバルな巻き戻しではありません。それは逆転する アプリが記録した歩数。
- 練習: の結果であるツールチップを書きます。 元に戻す、やり直す、そして古い理由。
- 次に、切り離された HEAD が何を意味するか。