レッスン 24 · 回復
アクティブな操作を続行、スキップ、または中止する
マージまたはリベースが停止した場合、続行、スキップ、中止の 3 つの方法があります。どちらが適しているのか、それぞれが何を捨てるのか、そして後でリポジトリを確認する方法を学びましょう。
- レベル: 中級者
- 6 分で読みました
- 7 分の動画
- 更新されました
- このレッスンの前に: マージとリベースの競合を解決する
このブラウザに進行状況が保存されました。
再生すると、YouTube からビデオが読み込まれます (プライバシー強化モード)。
何を学ぶか
- 何かに触れる前に、どの操作がアクティブであるかを伝えます。
- すべての競合が解決され、マークが付けられた後にのみ続行してください。
- Skip が何を省略するのか、そしてそれがどのような場合に間違ったツールなのかを説明します。
- 操作を中止し、最初の状態に戻っていることを確認します。
始める前に
レッスン 23 の分岐点を使用します。conflict/sara (Sara の見出し「自信を持って変更を確認する。」) と conflict/omar (Omar の見出し「保存された変更をそれぞれ理解する。」)。どちらもコミット M からのものです。そのクリーン コピーを 3 つ作成し、gittree-continue、gittree-abort、および gittree-skip という名前を付けます。それぞれで、conflict/sara はチェックアウトされており、何も実行されていません。 3 つすべてで同じ操作を停止し、それぞれを異なる方法で残します。
すべてがローカルであり、無料プランです (GitTree はサインインを要求します)。ホスティング アカウント、プロバイダー、インターネットはありません。すべてのアイデンティティは架空のものです (example.com)。このレッスンを実際のプロジェクトで実行しないでください。
変更は、GitTree 内で行うか、ネイティブ Git コマンドを使用して行います。同じコピー内で両方を行うことはできません。結果の読み取りは常に安全です。メニュー ラベルは GitTree 2.0 独自の文字列から取得され、ネイティブ コマンドは使い捨てコピーの Git 2.43 で実行されました。 GitTree ステップは macOS、Windows、または Linux で実行されませんでした。
概念と状態の効果
停止した操作はそれ自身の状態です。終了するまで、リポジトリは実行内容を記憶しており、その上で別のマージやリベースを開始してはなりません。まず何がアクティブかを調べます。 GitTree のバナーには、「…を…にマージ中」、または「…を…にリベース中」(ステップが複数ある場合はステップ番号も表示)、および残っている競合の数がはっきりと表示されます。ターミナルでは、git status は「マージされていないパスがあります」とマージのヒントで始まり、リベースの場合は「対話型リベースが進行中です。…に」で始まり、使用できるコマンドのリストが表示されます。
すべての競合が解決され、その結果がステージングされると、Continue は続行されます。これは元のマージまたはリベースの再試行ではありません。マージ コミットを終了するか、リベースを次のコミットに移動します。
Skip は、リベースなど、コミットを再実行する操作のために存在します。現在のコミットの変更は結果から完全に除外されます。このレッスンでは、Skip が Sara の見出しを削除し、ブランチは Omar のコミットで終了します。これは「ファイルを受け入れる」方法でも、競合を延期する方法でもありません。また、それでも変更を必要とする場合には、間違ったツールです。マージは 1 つのステップであるため、マージにはスキップがありません。マージを完了するか中止するかのどちらかです。
Abort は操作を開始した場所に戻ります。これまでに解決したものはすべて破棄されます。 GitTree は、最初に削除したものの回復スナップショットを保存し、リポジトリは以前の正確なコミット、インデックス、ファイルに戻ります。それは、自分が何をしているのかわからないときの解決策です。
| 選択 | 結果 | かかる費用 |
|---|---|---|
| 続く | マージコミットが行われた、または次のコミットが再生された | 何もない、すべてが解決されれば |
| スキップ | 現在のコミットの変更は除外されます | その変化を再び見つけるまで |
| 中止 | リポジトリが最初の状態に戻りました | 手術中に行われた作業 |
正確なプロジェクトの状態を準備する
Sara と Omar のブランチを 1 回構築し、コピーを 3 つ作成します。レッスン 18 で残したプロジェクトの別の通常のコピーから開始し、元の gittree-features はそのままにしておきます。ページのバージョン: MERGED は共有ベース、SARA と OMAR は競合バージョン、RESOLVED は続行コピーに保存した結果です。
完全なファイル入力
以下のフェーズでのみ保存します。これらは、最後に改行を含む完全な 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>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">Review each change 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>GitTreeで
Command+Shift+P (Ubuntu では Ctrl+Shift+P) でパレットを開きます。名前付きブランチに対するアクションには、そのブランチの右クリック メニューが使用されます。
- 次のセクションで示すように、3 つのコピーを作成します。それぞれで、
conflict/saraはチェックアウトされており、ステータスは空です。中止コピー内のconflict/saraの完全な ID に注目してください。 - Continue copy. gittree-continue を開きます。
conflict/omarを右クリックし、Always a merge commit を含む Merge conflict/omar into conflict/sara を選択します。止まります。バナーで Resolve を選択し、index.htmlを開き、Edit Output を選択し、Review each change with confidence.と入力して Save and Mark Resolved を選択します。 - 競合が残っていないことを確認し、バナーで Continue を 1 回選択します。通知には「完了」と書かれています。そしてバナーは消えます。新しいコミットには 2 つの親があります。
- Abort copy. gittree-abort を開いて同じマージを開始します。対立を未解決のままにしておきます。バナーで Abort… を選択します。 「操作を中止しますか?」というダイアログが表示されます。ブランチ、インデックス、ファイルは元の状態に戻り、削除されたものは最初に回復スナップショットに保持されると説明しています。 Abortを選択します。通知には「中止されました。ドロップされた変更は refs/ogt/trash/… に保存されます。元に戻すと元に戻ります。」と書かれています。 (中止しても何もドロップされない場合は、「中止されました。リポジトリは以前の場所に戻りました。」と表示されます。)
- 中止を確認してください:
conflict/saraはメモした ID のままで、ページは Sara の完全な見出しであり、バナーはありません。 - Skip copy. gittree-skip を開きます。
conflict/omarを右クリックして、Rebase conflict/sara onto conflict/omar を選択します。オプションをオフのままにして、Rebase conflict/sara を選択します。止まります。バナーでは、Continue と Abort… の隣に Skip が表示されるようになりました。マージ バナーにはスキップがありませんでした。 - どのコミット (Sara のもの) が再生されているかを確認し、スキップすると見出しが省略されることを受け入れ、Skip を 1 回選択します。通知には「手順をスキップしました」と書かれています。
- スキップを確認してください。ページには Omar の見出しが表示され、
conflict/saraは Omar のコミットを指しており、バナーは表示されていません。 3 つの結果を比較し、それらを離してください。
コース内のすべての通常のコミット: Summary は指定された件名、Description は空、オプション Amend Previous Commit、Skip Hooks、Add Signed-off-by、Different Author、Push After Commit、および Allow Empty Commit はオフのままです。
ターミナル内
レッスン 18 の結果の別のクリーン コピー:
git switch --create conflict/sara
BASE_SHA="$(git rev-parse HEAD)"SARA を index.html として保存し、次のようにします。
git add -- index.html
git -c user.name="Sara Lindqvist" -c user.email=sara@example.com commit --quiet -m "feat: Sara clarifies the hero"
git switch --quiet --create conflict/omar "$BASE_SHA"OMAR を index.html として保存し、次のようにします。
git add -- index.html
git -c user.name="Omar Haddad" -c user.email=omar@example.com commit --quiet -m "feat: Omar explains the hero"
git switch --quiet conflict/saraこの状態のクリーン コピーを 3 つ作成します (gittree-continue、gittree-abort、gittree-skip)。まず、不明な点がある場合は、何がアクティブになっているかを確認してください。
git statusContinue copy. マージは終了コード 1 で停止します。解決済みを index.html として保存し、次のようにします。
git merge --no-ff --no-edit conflict/omar
git add -- index.html
git -c core.editor=true merge --continue
git ls-files --unmerged
git status --short最後の 2 つのコマンドは何も出力しません。 Abort copy:
git rev-parse conflict/sara
git merge --no-edit conflict/omar
git merge --abort
git rev-parse HEAD conflict/sara
git status --shortマージが停止し、git merge --abort がマージを終了します。 git rev-parse HEAD conflict/sara によって出力される 2 つの ID は等しく、index.html は Sara の完全なページであり、ステータスは空です。停止したリベースは git rebase --abort と同じように残ります。 Skip copy:
git rebase conflict/omar
git rebase --skip
git rev-parse HEAD conflict/omar
git status --shortリベースは停止します。 git rebase --skip は「リベースに成功しました」で終了します。 2 つの ID は等しいため、Sara のブランチは Omar のコミット上に配置され、ページは Omar のものとなり、ステータスは空になります。 Sara のスキップされたコミットはブランチ上にありませんが、Git はしばらくの間それを保持します (reflog、レッスン 29)。その結果を両方の入力を維持した解決策として解釈しないでください。
結果
Where you end: 3 つのコピー、3 つの異なる結果。続行コピーには、結合された見出しを持つ 2 つの親マージ コミットがあります。打ち切りコピーはまさに開始位置にあり、サラの見出しが付いています。スキップ コピーには、Omar の見出しと、Omar のコミット上の Sara のブランチが含まれています。 3 つとも操作は終了しており、状態はクリーンです。
よくある間違い
- Skip を使用して競合を「回避」します。そのコミットの変更を結果から削除します。
- マージまたはリベースが停止している間に別のマージまたはリベースを開始する。
git merge --abortやgit rebase --abortの代わりにgit reset --hardを使用してエスケープします。- 終了まで 1 クリックで中止するか、何がステージングされているかわからない場合に続行します。
何か問題が発生した場合
迷った場合は、まずバナーまたは git status を読んで、もう一度判断してください。中止は常に最初に戻る安全な方法です。間違ってスキップした場合でも、やみくもにやり直さないでください。スキップされたコミットは、しばらくの間、reflog からアクセスできます (レッスン 29)。レッスン 30 では、GitTree の Undo で何を元に戻せるかを示します。
理解度を確認してください
各質問に答えてから、その理由を読みましょう。 「必須」とマークされた質問は、レッスンの完了にカウントされます。
6 個中 0 個が正解です
必須の質問に正しく答えると、レッスンを完了できます。
このブラウザで確認しました。
練習する
各コピーでは、操作、選択、証明を記述します。「続行」の場合は 2 つの親と空のマージされていないリスト、「中止」の場合は等しい ID とサラのページ、「スキップ」の場合は Omar のページとコミットのブランチです。次に、マージにスキップが提供されない理由を予測します。
あなた自身の確認: サイトはあなたのコンピュータを認識できません。
レッスンを完了するには、必須の質問に正しく答え、実践的な演習を確認してください。
要約
- 行動する前に何がアクティブかを調べてください。
- 解決後に続行し、コミットを残す場合のみスキップし、元に戻る場合は中止します。
- その後、コミット、ファイル、ステータスを確認してください。
関連している
用語集の用語の紹介
続行 — متابعة;スキップ — تخطّي;中止 — إيقاف;操作 — عملية。
ビデオトランスクリプト
ビデオのナレーションが次々と流れます。
トランスクリプトを表示する
- マージまたはリベースが停止します。あなたは3つ持っています ways out.
- 続行すると終了します。スキップは 1 つ残します commit out.中止すると元に戻ります。
- まず、どの操作がどの操作であるかを常に確認してください。 アクティブな。
- バナーに名前が付けられています。 In a terminal, git status does.
- Sara と Omar のブランチを構築し、 同一のコピーが 3 つあります。
- 同じ始まり、3 つの異なる結末。
- コピー 1: 続けます。マージを開始し、 and it stops.
- 解決してファイルを開いて、 combined heading.
- 保存して解決済みとしてマークすると、Git は file as done.
- 「続行」は現在利用可能です。 Choose it once.
- 終わり。新しいコミットには 2 つの親があり、 バナーが消えてしまいました。
- Copy two: we abort.同じマージを開始します。
- 葛藤を放っておいて、選択してください 中止します。
- ダイアログでは何が返されるかを説明します。 まず守るもの。
- リポジトリが元の場所に戻りました 前に。
- ブランチの先端は同じ ID であり、 ページは再びサラです。
- Copy three: we skip.これはリベースです。
- Sara のブランチを Omar のブランチにリベースします。止まる 葛藤を抱えて。
- バナーに [スキップ] ボタンが追加されました。マージ never had one.
- Skip は Sara のコミットを 結果。それを大声で言ってください。
- [1 回スキップ] を選択します。
- このページにはオマールの見出しが表示されます。サラさんの ブランチは現在彼のコミット上にあります。
- スキップは解決策ではありません。削除されました この結果によるサラの変化。
- ターミナルでは、git status に内容が表示されます。 アクティブ、およびコマンド。
- マージ: 解決されたファイルを追加してから git マージを続行します。
- 中止: 枝の先端は同じです 前と後。
- スキップ: git rebase スキップとブランチ Omar のコミットにあります。
- すべてのコピーのステータスは空であり、 マージされないままのものは何もありません。
- 入力を変更します。ファイルを解決してから、 代わりに「中止」を選択してください。
- 解像度が落ちます。 リカバリスナップショットが保存されます。
- 逃げるためにリセットハードを使用しないでください。中止は 安全な脱出方法。
- 誤ってスキップした場合、コミットは まだリフレク中です。
- 練習: 操作、選択に名前を付けます。 そして各コピーの証拠。
- 次に、単一のコミットを別のコミットにコピーします チェリーピックで枝。