未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【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