Gitで削除などの変更(ステージング後コミット前の段階)を復元する方法

はじめに

この記事では、「Gitで削除などの変更(ステージング後コミット前の段階)を復元する方法」について書いています。

git rmでファイルを消した後、そのファイルを復元しようとしても上手くいかずに調べたのが記事を書いたきっかけでした。

自分に向けた備忘録でもありますが、「Gitで削除や編集したファイルを復元したい」な人の一助になれば嬉しいです。

要点だけ

以下のようにコマンドを実行することで復元できます。

git restore --staged <ファイル名>
git checkout <ファイル名>

実際に試してみる

Note

試した際の環境は以下の通りです。

実験で使うgitのリポジトリは以下のような構成になっており、またリポジトリ内のファイルは全て登録されているものとします。

sample
├ .git
│  └ ...
├ alpha.txt
└ beta.txt

ここからgit rm beta.txtを実行してbeta.txtを削除した状態でスタートしたいと思います。

Note

削除した例で説明してますが、ファイル内を編集したといった変更でも同じ要領で復元する行うことができます。

この時のリポジトリ(フォルダ)の状態は以下のようにbeta.txtは削除されています。

sample
├ .git
│  └ ...
└ alpha.txt

また、git statusを実行すると次のような出力が得られると思います。

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    beta.txt

この状態から削除前の状態へ戻すには、まず下のコマンドを実行してインデックス領域への登録を解除します。

git restore --staged <ファイル名>

この作業を行ってから

git checkout <ファイル名>

を実行します。今回の例だと

git restore --staged beta.txt
git checkout beta.txt

と実行することで復元できました。

Note

git restore ...を行わず(=削除した情報がインデックス領域へ登録されている状態)でgit checkout ...を実行しても、下記のようなエラー文が出てしまいます。

error: pathspec 'beta.txt' did not match any file(s) known to git

なのでgit restore ...を忘れないようにしましょう

おわりに

「Gitで削除などの変更(ステージング後コミット前の段階)を復元する方法」について書いています。」について解説しました。

誤った処理(特に削除)をしてしまった時、少しテンパってしまいますが復元する方法が分かったので安心して変更を加えていけそうです。

さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。

awesome-linus.com