かいがらひろい

自分の書いたものが(自分にとって)一番わかりやすい

gitで作業を一時中断して別ブランチに移りたいときに使えるコマンド

1. git stashを使う方法

stash: こっそりしまう、隠す、蓄える

基本

git stashコマンドを使うと作業中の変更を一時保存することができます。

$ git stash
Saved working directory and index state WIP on master: ***

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

保存した変更を戻したいときは git stash pop コマンドを使用します。

$ git stash
Saved working directory and index state WIP on master: ***
   
$ git status
On branch master
nothing to commit, working tree clean
   
$ git stash pop
On branch master
Changes not staged for commit:    
            modified:   new.txt

未追跡ファイルを保存する

git stashはそのままでは未追跡のファイルを保存しません。

$ git status
On branch master
Untracked files:
        new.txt
    
$ git stash
No local changes to save

未追跡ファイルを保存するにはあらかじめstageしておくか、

$ git stage new.txt
$ git stash
Saved working directory and index state WIP on master: ***

-uオプション(または--include-untracked)をつけて実行します。

$ git stash -u
Saved working directory and index state WIP on master: ***

2. コミットした変更を戻す方法

自分は普段こちらを使っています。 ただし戻し忘れると一時保存のつもりの変更がコミットログに残ってしまう欠点はあります。

一時保存したい変更をとりあえず適当なメッセージでコミットしておいて、git reset HEAD^コマンドで戻します。

$ git commit -m "wip"
$ git reset HEAD^
$ git status
    On branch master
    Untracked files:
            new.txt

いちいち打つのは面倒なので.bashrcにundoという名前でコマンドエイリアスを使って気軽に運用しています。

alias undo="git reset HEAD^"