Help us understand the problem. What is going on with this article?

【git stash】コミットはせずに変更を退避したいとき

「とあるブランチで作業中だけど、いますぐやりたいことができた。
作業すごく中途半端だからコミットはしたくない。」
というときに、stashが使えます。
stashを使用すると、コミットしていない変更を退避することができます。
stashで変更を退避させて、今すぐやりたい作業をして、退避させていた変更を戻して作業を再開することができます。

変更を退避する

$git stash save

コミットしていない変更がある状態で上記のコマンドを実行すると、変更した部分が退避されます。
コミットしていない変更とは、addしたものもaddしていないものもどちらも含まれます。
ブランチは変更が取り消されたきれいな状態となります。
※saveは省略可能

退避した作業の一覧を見る

以下のコマンドで退避した作業の一覧を見ることができます。

$git stash list


// こんな感じで出力されます
stash@{0}: WIP on test: xxxx
stash@{1}: WIP on commit-sample: xxxx

stash@{X}がstashの名前で、WIP onのあとはブランチ名です。xxxxはstashをしたときのHEADのコミットハッシュとコミットメッセージになります。

退避した作業を戻す

// stash@{0}の作業をもとに戻します

$git stash apply stash@{0}

stash apply stash名にて退避した作業を元に戻すことができます。
このとき、現在チェックアウトしているブランチへ退避した変更が書かれます。
変更を退避したときのブランチにも、それ以外のブランチにも戻すことができます。
また、stash名を指定しない場合は、直近に退避された作業を戻します。

上記のコマンドだと、addしていた変更もaddされていない状態で戻ります(stagedされていた変更もnot stagedととして戻る)。
addした状態そのままにもどしたいときは、上記のコマンドに--indexオプションを付けて実行します。

$git stash apply stash@{0} --index

退避した作業を消す

stashを使用して退避した作業を元に戻しても、退避した作業はそのまま残ります。
stash listを行うとそのまま残っているはずです。
退避した作業を消すには、以下のコマンドを使用します。

// stash@{0}を削除します

$git stash drop stash@{0}

退避した作業を元に戻すと同時に、stashのリストから消す

退避した作業を消すにはdropを使用する必要がありましたが、作業をもとに戻すと同時に消すこともできます。

// stash@{0}の作業をもとに戻すと同時に、退避作業の中から削除します

$git stash pop stash@{0}

退避した変更をもとに戻す際にコンフリクトが発生する場合などもあるので、消すのは同時にしなくてもよいかもしれません。

そのほか

作業を退避するときにメッセージを付ける

$git stash save "stash message"

$git stash list
stash@{0}: On test: stash message

コミットハッシュ+コミットメッセージが表示されていた部分が、指定したメッセージになっています。

退避した変更の詳細をみる

$git stash show stash@{0}

変更ファイルの一覧を見ることができます。
また、-pオプションをつけることで、変更内容の詳細をみることもできます。

$git stash show stash@{0} -p

新規追加したファイルも退避させる

新規に追加したファイルをAddしていない状態で退避させるには-u(もしくは--include-untracked)オプションを使用します。
(すでにaddしている場合にはオプションなしで退避できます)

$git stash -u

addした変更以外を退避させる

オプションを何もつけない場合、addした変更もaddしていない変更も退避されます(新規追加ファイルは例外)。
-k(もしくは--keep-index)をつけて実行すると、addした変更は退避されません。

$git stash -k

退避した作業をすべて消す

$git stash clear

stash listで表示されていた退避した作業がすべて消えます。

chihiro
jrits
信頼と魅力のある先進のITをもとに、お客様のワークスタイル・イノベーションの実現を目指します。
http://www.jrits.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした