Git で個々のファイルとフォルダーを古いバージョンに戻す方法
Git は、コードベースのすべてのバージョンを追跡するための強力なツールであり、多くの場合、古いバージョンのファイルに戻って復元する必要があります。Git は、すべてのコミットを元に戻したり、リポジトリ全体をリセットしたりできますが、単一のファイルまたはフォルダーへの変更を元に戻すこともできます。
リターンとリセット
通常、コミットを「元に戻す」と、Git は新しいコミットを適用し、反対の変更を適用して、効果的に元に戻します。これは、間違いを犯し、そのコミットがまだ履歴にあるにもかかわらず「削除」する必要がある場合に役立ちます。
リポジトリのリセットは少し異なります。一度に 1 つのコミットしか元に戻すことができませんが、そうするとgit reset
、Git はコミットが行われた時点でのリポジトリの状態を逆にします。これは多くの理由で行われますが、通常はコミットを削除したり、ブランチ履歴を修正したりするためです。
これらの操作は両方ともリポジトリ全体で機能しますが、同様のコマンドを使用して、個々のファイルまたはフォルダーに対して同じアクションを実行することもできます。たとえばgit reset
、単一のファイルに対して を使用すると、そのファイルはコミットが行われたときの状態に戻ります。これは、Git 履歴から古いバージョンのファイルを選択したいだけの場合に便利です。
Git で古いバージョンを表示する
ファイルを以前の状態に戻すローテク ソリューションは非常にシンプルです。Github および他のほとんどの Git サーバーはファイル履歴を追跡しており、コミットをクリックして [ファイルの参照] をクリックするだけでファイルを表示できます。過去のリポジトリのスナップショット。その後、ファイルをダウンロードするか、テキストをコピーできます。
これは、大きなコード ファイルを扱っていて、作成した関数の古いバージョンを確認したい場合に特に便利です。この場合、おそらくすべてを返すのではなく、1 つの関数だけを返す必要があります。Git CLI に触れずに、この関数のコードをコピーできます。
Git でファイルを古いバージョンにリセットする
このテスト リポジトリでは、README を編集して新しいファイルを追加するコミットを行いました。README に加えられた変更を元に戻したいのですが、リポジトリ全体を元のコミットにリセットしたくありません。
解決策は、そのファイルの古いバージョンを確認することによってのみ README をリセットすることです。Git コマンドcheckout
は、ブランチの切り替えなど、多くのことを行いますが、主に、特定のコミットまたはブランチ ID を持つファイルをアップロードするために使用されます。
ファイルを古いバージョンにリセットするには、リセット元のコミット ID を見つける必要があります。git log
これに単一のファイルスコープを使用して、そのファイルに加えられた変更のみを表示できます。
git log README.md
コミット ID をコピーgit checkout
し、ID とファイル パスを使用して実行します。
git checkout 22710694b25d7ce5297559851beb7d3e4de811bb README.md
これによりファイルが元に戻りますが、変更はまだコミットされません。準備ができたら、編集してコミットできます。
この例git checkout
では、次のコミットのために変更が準備されています。それらをコミットしたくない場合は、変更を破棄できます。これは、Github を使用せずに古いバージョンのファイルを一時的にダウンロードする場合に役立ちます。
個々のファイルへの変更を元に戻す
同様に、単一のコミットで変更を元に戻したい場合は、git revert
. ただし、それを 1 つのファイルに適用する方法はありませんが、コミットが他のファイルに影響する場合は、単純に変更を元に戻すことができます。
この--no-commit
フラグを使用して、Git が自動的に作成する「元に戻されたコミット」の編集を有効にします。
git revert de8564b131ca6a15a7e7c73f5ef156b119cc0b93
これにより、返品を完了する前にファイルを変更できます。不要な変更がある場合は、クライアントを介して、または空の を使用して削除できます git checkout
。
git checkout -- file
コメントを残す