未来エンジニア養成所Blog

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

【Git&GitHub】作業を一時避難する(git stashコマンド)

title


作業を一時避難する

作業を一時避難する方法について解説します。


作業が途中なのでコミットしたくないけど、別のブランチで急遽作業をしないといけなくなったような時に使います。

そのような時に今やっている作業を一時的に避難しておく、コミットはしないけど一旦保存しておくということができます。

今回はその方法について解説します。


それでは、作業を一時避難するコマンドについて確認しましょう。

そのコマンドは、

$ git stash

コマンドになります。


もしくは

$ git stash save

と入力しても大丈夫です。


「save」というのは省略可能なので、「git stash」と「git stash save」は同じコマンドになります。


「stash」というのは「隠す」という意味になります。

ですので、「git stash」で、今やっている作業を隠してしまう、一時避難すると言う事になります。


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


今ワークツリーで作業していて、「index.html」というファイルを変更したとします。

その後また別のファイルを作業していて「top.html」というファイルを変更して、それを「git add」でステージにアップしたとします。

このような状況で、まだコミットするまでは作業が完了していないけど、急遽バグが起きて別のブランチで作業をしないといけなくなったという時にこれらの変更を一時避難するのが「git stash」コマンドです。

「git stash」コマンドを使うことで、変更分をstashに一時避難させます。

stash


これは何が起こっているのかというと、「git stash」と入力することで、「index.html」の変更と、「top.html」の変更を「stash」という場所に一時格納させます。

そして、ワークツリーとステージの変更は無かったことにすることで、別のブランチで作業することを可能にします。

これが「git stash」になります。


実際にやってみよう

それでは、ターミナルに移動して実際にやってみましょう。


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

$ git status
On branch main
nothing to commit, working tree clean

何も変更されていません。

$ ls
feature.html    first.html  index.html  main2.html  secret.txt
feature2.html   home.html   main.html   second.html third.html

今回は何かファイルを変更してその変更分を「git stash」で一時避難させてみましょう。


今回は「home.html」を変更してみます。

それではテキストエディタで「home.html」を開いてみてください。

今回はここに「<p>git stash</p>」と追記します。

追記したら保存してターミナルに戻ります。

では変更状況を確認します。

$ git status
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")

すると「home.html」が変更されたと表示されています。

これを「git stash」で一時避難させましょう。

$ git stash
Saved working directory and index state WIP on main: 55c46b4 third.htmlを追加

すると、ワークツリーとステージの状態を保存した表示されています。

これで一時避難することができています。

では、今のファイルの変更状況を確認してみます。

$ git status
On branch main
nothing to commit, working tree clean

特に何も変更されていません。

念のため「home.html」のファイルの中身も確認しておきましょう。

 $ cat home.html
<p>home</p>
<p>git pull</p>

すると先ほど変更した分が無かったことになっています。


このように「git stash」をすることで、変更を別の場所に一時避難させることができます。

今回は一時避難する方法までを解説しました。

次回以降で一時避難した変更を確認する方法や、その変更を復元する方法について解説します。


参考図書



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



あわせて学習したい

phoeducation.work