避難した作業を復元しよう
今回は一時避難した作業を復元する方法について解説します。
避難した作業を復元するコマンドは
$ git stash apply
です。
applyというのは「適用する」という意味になります。
この「git stash apply」コマンドで、最新の避難した作業を復元することができます。
なお、このapplyコマンドだと実はステージの状況までは復元されません。
そのため、ステージの状況も復元したい場合は
$ git stash apply --index
と実行します。
もし、最新の避難した作業ではなく、特定の作業を復元したい場合は
$ git stash apply [スタッシュ名]
と入力します。
たとえば、
$ git stash apply stash@{1}
のように入力します。
この「stash@{1}」というのは「git stash list」コマンドで確認することができます。
それではいつも通りイメージで確認しておきましょう。
今の状況として、2回避難する作業をしたとします。
1回目はワークツリーに「index.html」を変更して、「top.html」を変更した後、それをステージに追加した状況だとします。
その変更を「git stash」コマンドで避難させた後、また別の変更をしていて、そして「index.html」と「top.html」をステージに追加します。
その状況を「git stash」コマンドでまた避難という状況だとします。
ちなみにこの「stash@」の番号は「git stash」の場合、一番最新の避難が「stash@{0}」となり、その後は順に「stash@{1}」「stash@{2}」と続いていきます。
ではこの状況で「避難作業2」の方、つまり最新の避難した作業、を復元したいとします。
そのためのコマンドは
$ git stash apply --index
になります。
このコマンドを実行することで、「避難作業2」の状況をステージの状況も併せて復元します。
結果、「top.html」と「index.html」が変更されて、それがステージに追加されている状況を復元することができます。
実際にやってみよう
それではターミナルを開いて、避難した作業を復元してみましょう。
まず、今のファイルの状況を確認します。
$ git status On branch main nothing to commit, working tree clean
すると何も変更されていないことがわかります。
では次に今回復元する内容は「home.html」の変更なので、「home.html」のファイルの内容も確認しておきましょう。
$ cat home.html <p>home</p> <p>git pull</p>
今は2行しか書かれていない状態です。
ではここから避難した作業を復元していきましょう。
$ git stash apply On branch main Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: home.html no changes added to commit (use "git add" and/or "git commit -a")
これで復元ができました。
「git stash apply」コマンドを実行すると、表示されるのは「git status」と同じ内容が表示されます。
ここからわかるのは「home.html」が変更されているということです。
では実際に「home.html」の中身を確認してみましょう。
$ cat home.html <p>home</p> <p>git pull</p> <p>git stash</p>
確認すると3行目に「<p>git stash</p>」という変更分が復元されています。
このように「git stash apply」コマンドを使うことで、一時避難していた変更を復元することができました。
参考図書
独学で挫折しそうになったら、オンラインプログラミングスクール