Git でのリセットとリストア

Abdul Jabbar 2023年1月30日
  1. Git restore コマンド
  2. Git リセットコマンド
  3. git resetgit restore の違い
Git でのリセットとリストア

Git には、個々のファイルを処理するコマンドがいくつかありますが、それらは非常にまれです。これらのコマンドは、git addgit rmgit mvgit checkoutgit resetgit restore、およびそれぞれの反対です。

ただし、Git は賢いです。フェッチした作業がどこにあるかを記憶しているので、後で次のフェッチマーカーから再びフェッチできます。これは、ローカルで作成したコミットのみを含む Git リポジトリを持つことができることを意味します。同じコミットを別のリポジトリからすでにフェッチしている場合、Git はそれらを再度フェッチすることを回避できます。

ここで、この記事では、Git の 2つの重要なコマンドについて説明します。

  1. git restore
  2. git reset

Git restore コマンド

Git restore コマンドは、作業ツリー内のファイルをインデックスまたは別のコミットから復元するために使用されます。このコマンドは、現在のブランチを更新しません。また、別のコミットからインデックス内のファイルを復元することもできます。現在のブランチのコミットとは異なるコミットのコードを使用する場合に非常に便利です。restore コマンドは、ローカルブランチでコミットされていないローカル変更を破棄するのに役立ちます。

Git restore は、現在の状況に応じて、作業コピーまたはインデックス、あるいはその両方で作業を元に戻すかどうかに応じて、3つの異なる状況で使用できます。

git restore [--worktree] <file>

上記のコマンドは、作業コピーの <file> をインデックスファイルの内容とともに上書きします。または、作業コピーの変更を元に戻すと言うこともできます。特に指定しない場合は提案されるので、指定するかどうかは関係ありません。

git restore --staged <file>

上記のコマンドは、インデックスファイルの <file> をローカルリポジトリの現在の HEAD で上書きします。または、コミットされていない変更が最近ステージングされたコンテンツであると言えます。確かに古い git reset HEAD <file> と同じであると言えば間違いではありません。

git restore --staged --worktree --source HEAD <file>

上記のように、作業コピーとインデックスの両方を現在の HEAD で上書きするには、上記のコマンドを使用します。このバージョンでは、作業コピーを HEAD に戻すことと、現在のローカルブランチから最近ステージングされた作業をステージングされていないことの両方を実行できます。

Git リセットコマンド

Git reset は、ブランチを更新し、チップを移動してブランチにコミットを追加または削除することです。この操作により、コミット履歴が変更されます。Git reset は、Git の復元と重複して、インデックスを復元するために使用されます。手動編集または gitadd メソッドを使用してファイルが変更された場合、git reset はそのファイルを適切に処理しません。

ファイルは新しいコミットにコピーされ、古いコミットで削除済みとしてマークされます。ファイルが作業コピーから削除されたように見えるという警告が表示されます。Git リセットも名前変更をうまく処理しません。ファイルを削除して同じ名前のファイルを追加することを意味するのではありませんが、そうします。

reset コマンドを使用して、作業コピー内のファイルを移動することはできません。ファイルは別のコミットにコピーされるだけではありません。それらは作業コピーから削除され、ターゲットコミットで新しいファイルとして復元されます。ファイルに不要な変更を加えた場合、ファイルを削除する必要はありません。ファイルへのすべての変更を元に戻すことはできますが、ファイル自体を元に戻すことはできません。

git resetgit restore の違い

restore コマンドは、コミットされていないローカル変更をステージング解除または破棄するのに役立ちます。インデックスまたは別のコミットから作業ツリー内のファイルを復元するために使用できます。このコマンドはブランチを更新しません。別のコミットからインデックス内のファイルを復元することも役立ちます。

Git reset は、現在のブランチを更新するために使用されます。git restore と交差して、インデックスを復元することも役立ちます。Git reset は、作業ツリーの変更を破棄するためにインデックスをリセットするために使用されます。このコマンドはブランチを更新しません。これは主に --soft オプションとともに使用されます。このオプションは、インデックスをリセットし、作業ツリーを変更しないままにします。破棄したくない変更をステージングした場合に役立ちます。

作業ディレクトリがクリーンな場合(変更をコミットしない場合)、Git reset は正常に完了しますが、作業ディレクトリがクリーンな場合、git restore は失敗します。どちらも HEAD に影響を与える可能性があります。ただし、Git の restore は、ステージング領域を介して間接的に HEAD にのみ影響します。Git reset は、インデックスと HEAD を直接操作できます。どちらも HEAD に影響を与える可能性があります。Git restore は、ステージング領域を介して間接的にインデックスと HEAD にのみ影響します。

Git reset は、まだ何もプッシュしていない場合にのみ、ローカルリポジトリを変更するために使用できます。リモートサーバーにプッシュした場合、git-reset はステージング領域と作業コピーを変更しますが、リポジトリは変更しません。ローカルの変更を元に戻したいが、それらを再度導入したくない場合に便利です。

Git restore は、ステージング領域やローカル作業コピーではなく、リポジトリの変更にのみ使用できるため、反対です。プッシュしたコミットには影響しません。

著者: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

関連記事 - Git Reset

関連記事 - Git Restore