git commitせずに別branchで作業したい時【git stash】
目次
今回はgit commitせずに別branchで作業したい...そんな時に使用できる
git stashとgit 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
参考サイト
https://qiita.com/chihiro/items/f373873d5c2dfbd03250
https://qiita.com/akasakas/items/768c0b563b96f8a9be9d
git worktreeを使用する
https://itosae.com/git_worktree/