[Git]git stashの使い方

git stashとは

ソースを一時保存する機能

開発中にコミットするまでに差し込みがあった場合や、最終コミットの状態に一時的に戻して動作確認などしたいときに、一時退避して別のことを行って元に戻して続きから開発ができるようになる。

少人数開発だとたまにしか使わなくて忘れがちなので、自分で確認したことを記述

保存する

現在の状態を保存→直前の状態に戻る(追加されたファイルはそのまま)

$ git stash
Saved working directory and index state WIP on master: 9b4ce41 コミットメッセージ

一覧を確認する

保存されているソースの一覧をみる

$ git stash list
stash@{0}: WIP on master: 9b4ce41 コミットメッセージ
stash@{1}: WIP on master: 89ab12b コミットメッセージ

保存したソースを適用する

保存されているソースを取り出す。指定しない場合は0(もっとも最近のもの)が指定される。

$ git stash apply 番号
On branch feature/manage-user-accounts
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)


modified:   app/assets/javascripts/conversation.js


no changes added to commit (use "git add" and/or "git commit -a")

削除する

保存されているソースを削除する。指定しない場合は0(もっとも最近のもの)が指定される。

$git stash drop 番号
Dropped refs/stash@{0} (b34b0cfde78e4fc350b39e74c20e4c83788cbd83)

取り出して削除する

保存されているソースをapplyしてdropする。

$ git stash pop 番号
On branch feature/manage-user-accounts
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)


modified:   app/assets/javascripts/conversation.js


no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (e6e3c8053ca472fe7366049b7e3062c8e6a567d2)

中身の確認をする

保存されているソースの変更箇所を確認する。

$ git stash show 番号

これは、見れる情報が下記程度なので、あまり使わないかも。

 app/assets/javascripts/hogehoge.js | 3 +++
 1 file changed, 3 insertions(+)

補足

各コマンドで利用する番号について

各コマンドの番号というのは stash@{1} でもいけるし 1 でもいける。

コンフリクト

同じ箇所を変更していた場合はエラーが表示される

error: Your local changes to the following files would be overwritten by merge:
	app/assets/javascripts/conversation.js
Please commit your changes or stash them before you merge.
Aborting

えっ と思うこと(意外と重要)

stashは保存するときは変更があるソースは変更前の状態になるが、取り出して別のものを取り出す場合は、リセットされずに現状のソースにstashされているソースを適用する。

慣れるまではやっかい。

そもそも一時退避なので、できるだけ使わない方が良さそう。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です