未来エンジニア養成所Blog

プログラミングを皆に楽しんでもらうための情報をお届けします。

【Git&GitHub】避難した作業を復元する(git stash applyコマンド)

title


避難した作業を復元しよう

今回は一時避難した作業を復元する方法について解説します。


避難した作業を復元するコマンドは

$ 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」コマンドで確認することができます。


それではいつも通りイメージで確認しておきましょう。

stash


今の状況として、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」が変更されて、それがステージに追加されている状況を復元することができます。

stash


実際にやってみよう

それではターミナルを開いて、避難した作業を復元してみましょう。


まず、今のファイルの状況を確認します。

$ 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」コマンドを使うことで、一時避難していた変更を復元することができました。


参考図書



独学で挫折しそうになったら、オンラインプログラミングスクール
未来エンジニア養成所Logo



あわせて学習したい

phoeducation.work