git commitせずに別branchで作業したい時【git stash】

今回はgit commitせずに別branchで作業したい…そんな時に使用できる
git stashgit worktreeについての記事です。

以前、自身がお世話になっている もりけん塾の勉強会で git worktreeを教えていただきましたが、
当時は use caseにいまいちピンときていなく、実際業務で必要になった場面で使用することができませんでした…
git worktreeは以前書いた記事があるので、今回はgit stashを使用したパターンをまとめました。

git commitせずにbranchを切り替えるとどうなる?

内容がmergeされてしまう。
つまりfeatureブランチで新機能を開発していた際に、
git commitせずに他branchへcheckoutしてしまうと、featureブランチで作業していた内容がcheckout先のブランチにmergeされる。

mergeした際にコンフリクトが発生する場合は、エラーがでるので自動的にmergeはされない。

% git checkout **
error: Your local changes to the following files would be overwritten by checkout:
        index.html
Please commit your changes or stash them before you switch branches.
Aborting

具体的な use case

現在、featureブランチで機能追加を実装中。
「「 バグ発生 !!!!!!!!!!!!!!!!!!!!!!至急対応!!!!!!!!!!!!!!!!!!! 」」

機能追加を実装していたfeatureブランチではなく、
新たにブランチを切ってバグ対応をしなくてはいけない状況に。


しかし、機能追加実装中のfeatureブランチ内はまだcommitしたくない…そんな時!!!!!!

git stash

stashは隠すという意味

作業中の内容をstashする

% git stash
Saved working directory and index state WIP on feature: d1cb3ed Merge pull request #10 from sae-github/dev
POINT

git stashでは untrackファイルはstashされないので注意。

% git stash
No local changes to save

untrackファイルも含めて退避させたい時は -u (--include-untracked)オプションを付与する

% git stash -u

git statusで現在の状態を確認

作業途中の内容はstashされ、working tree cleanに

% git status
On branch feature
nothing to commit, working tree clean

stashした一覧を確認

% git stash list
stash@{0}: WIP on feature: d1cb3ed Merge pull request #10 from sae-github/dev
// WIP on の後はbranch名

退避した作業内容を反映する

% git stash apply
On branch feature
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:   index.html

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

不要なstashを削除する

% git stash drop 
Dropped refs/stash@{0} (92fad7c538481485cec40c24404dd7274fbb9710)

その他、良さそうなコマンド

messageをつけてstashしたい時

% git stash save "message"
Saved working directory and index state On feature: message

% git stash list
stash@{0}: On feature: message

退避した作業をもとに戻し、リストからも削除する

(applyとdropを同時にやってくれる)

% git stash pop stash@{0}

git add していないものだけstashさせたい

untrackファイルはstashされないので注意。

% git stash -k

参考サイト

【git stash】コミットはせずに変更を退避したいとき - Qiita
「とあるブランチで作業中だけど、いますぐやりたいことができた。作業がすごく中途半端だからコミットはしたくない。」というときに、stashが使えます。stashを使用すると、コミットしていない変更…
色々な git stash - Qiita
git stash コマンドを個人的によく使っていますが、オプションなどを忘れてしまいがちなので、備忘録として残しておきます。 スタッシュするgit stash git stash save メッ…

git worktreeを使用する

タイトルとURLをコピーしました