数週間前に行った古いコミットがあります。そのコミットから単一のファイルのみを復元したい。私は何をしますか?
git checkout 'master@{7 days ago}' -- path/to/file.txt
これはHEADを変更せず、ローカルファイルpath/to/file.txt
を上書きするだけです
可能なリビジョン仕様については man git-rev-parse を参照してください(もちろん、単純なハッシュ(dd9bacb
など)がうまく機能します)
変更をコミットすることを忘れないでください(レビュー後...)
git checkout [Revision_Key] -- path/to/file
を介して古いコミットからファイルをチェックアウトします。Gitにコミットされた最近のファイルを復元する必要がありました。繰り返しになり、別の視点を与えるために、次の2つのステップを実行してこれを行う必要があります。
git log -
これは、最新の3つのコミットを示しています。コメントと著者の名前を読んで、必要な正確なバージョンを絞り込みます。必要なコミットバージョンの長いコミットID(つまり、b6b94f2c19c456336d60b9409fb1e373036d3d71)を書き留めます。
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71-myfile.Java
復元するコミットIDとファイル名を渡します。二重ハイフンの前後にスペースがあることを確認してください。
他の多くの方法があります。しかし、これは覚えやすいシンプルなものです。お役に立てば幸いです。
注:プロジェクトのパス/フォルダ内にいる場合は、チェックアウトコマンドで完全なファイルのパスを入力する必要はありません。
すべての回答にはgit checkout <tree-ish> -- <pathspec>
が記載されています。 git v2.23.0の時点で、git checkout
が担当していたものの一部を想定する新しい git restore メソッドがあります。 github blog の変更点のハイライトをご覧ください。
このコマンドのデフォルトの動作は、source
パラメーター(これはコミットハッシュになります)からのコンテンツで作業ツリーの状態を復元することです。
コミットハッシュがabcdef
であると仮定すると、コマンドは次のようになります。
git restore --source=abcdef file_name
(デフォルトで)作業ツリーに配置します。変更をインデックスに直接入れて、すぐにコミットできるようにする場合:
git restore --source=abcdef --worktree --staged file_name
または短いオプション名:
git restore -s=abcdef -W -S file_name