序章
Git は、コードベースの各バージョンを維持するための優れたツールであり、時間をさかのぼって古いバージョンのファイルを復元する必要がある場合があります。 Git は、単一のファイルまたはフォルダーへの変更をロールバックしたり、完全なコミットを撤回したり、リポジトリ全体をリセットしたりできます。
元に戻すかリセットするかの選択
コミットを「元に戻す」場合、Git は通常、反対の変更を加えた新しいコミットを適用し、基本的にそれを取り消します。これは、コミットが履歴に残っていても、間違いを犯してコミットを「削除」する必要がある場合に便利です。
リポジトリをリセットする手順は多少異なります。一度に 1 つのコミットのみを取り消すことができますが、git reset を実行すると、Git はそのコミットが作成された時点にリポジトリを完全にリセットします。これはさまざまな理由で行われますが、最も一般的な理由は、コミットの消去またはブランチ履歴の修正です。
これらの手順はどちらもリポジトリ全体に影響しますが、同じコマンドを使用して、個々のファイルまたはフォルダーに同じ効果をもたらすことができます。たとえば、単一で git reset を実行すると、 ファイルは、コミットが作成されたときの状態に復元します.これは、Git 履歴から古いバージョンのファイルを選択したいだけの場合に便利です。
古い Git バージョンの調査
The low-tech approach to restoring a file to its original state is rather simple—Github and most other Git servers maintain track of your file history, and you can simply click on a commit and choose “Browse Files” to see a snapshot of your repository from the past. You may then either ファイルをダウンロードする またはテキストをコピーします。
これは、多数のコード ファイルを操作していて、作成したルーチンの以前のバージョンと比較したい場合に特に便利です。そのシナリオでは、すべてを元に戻すのではなく、1 つの関数だけを元に戻すことをお勧めします。 Git CLI に触れずに、その関数からコードをコピーできます。
Git ファイルを古いバージョンに戻す
このテスト リポジトリでコミットを行い、README を変更して新しいファイルを追加しました。 README の変更を元に戻したいのですが、リポジトリ全体を最初のコミットに復元したくありません。
答えは、そのファイルの古いバージョンをダウンロードして、README だけをリセットすることです。 Git の checkout コマンドは、ブランチの切り替えなど、さまざまなことを実行できますが、コミットまたはブランチ ID に基づいてデータをダウンロードするためによく使用されます。
ファイルを以前のバージョンに復元するには、復元したいときのコミット ID を見つけます。そのファイルに加えられた変更のみを確認するために、スコープが設定された単一のファイルで git log を使用できます。
git ログ README.md
コミット ID をコピーし、ID とファイル パスを使用して git checkout を実行します。
git checkout 22710694b25d7ce5297559851beb7d3e4de811bb README.md
これによりファイルが変更されますが、変更はまだコミットされません。準備ができたら、自由に変更を加えてコミットできます。
この場合、git checkout は変更を次のコミットの準備ができているとマークしました。変更をコミットしたくない場合は、そうすることができます。これは、Github を使用せずに古いバージョンのファイルを一時的にダウンロードする場合に便利です。
個々のファイルへの変更を元に戻す
同様に、git revert を使用して、1 回のコミットで行った変更を元に戻すことができます。単一のファイルに適用する方法はありませんが、コミットが他のファイルに影響を与える場合は、変更を拒否してください。
Use the —no-commit switch to enable modification of the “revert commit” that Git generates automatically.
git revert de8564b131ca6a15a7e7c73f5ef156b119cc0b93
これにより、元に戻す前にファイルに変更を加えることができます。ステージングされた望ましくない変更がある場合は、クライアントまたは空の git チェックアウトを使用してそれらを消去できます。
git チェックアウト -- ファイル