【git stash】git commandの使い方 - inokawablog

【git stash】git commandの使い方

いつ使うのか?

コミットはせずに変更を退避したいときに使用します。例えば、

「ブランチAで作業していたけど、急にブランチBで作業する必要が出てきたので、切り替えなければいけない。

しかし、作業が途中なのでコミットはしたくない。」

なんて時にgit stashを使用します。

流れとしては、


ブランチAの作業は一旦置いておきたいのでgit stashで変更を退避させる。

ブランチBへ移動。

ブランチBで今すぐやりたい作業を終わらせる。

ブランチAに戻ってきて、git stashで退避させていた変更を戻して作業を再開。


こんな感じになります。

このような一連の流れで使用するstashのコマンドを紹介します。

変更を退避する

$ git stash
or
$ git stash save

メッセージ付きでスタッシュ

$ git stash save "something message"

スタッシュしたリスト一覧を表示

$ git stash list

こんな感じで出力されます。

$ stash@{0}: WIP on test: xxxx

退避した作業を元に戻す

$ git stash apply stash@{0}

退避した作業を消す

$ git stash drop

退避した作業を元に戻して、退避した作業を消す

つまり, apply + drop になります。

最新のものが適応される。
$ git stash pop

指定も可能
$ git stash pop stash@{0}

http://hpcmemo.hatenablog.com/entry/2018/05/11/114403

git stash popでconflictが発生したら!!!!

サーバ側のファイルに合わせる場合

$ git checkout --theirs <path>

# 例
$ git checkout --theirs .
$ git checkout --theirs fileA.txt

自分の方のファイルに合わせる場合

$ git checkout --ours <path>

# 例
$ git checkout --ours .
$ git checkout --ours fileB.txt

個別に設定する場合

例えば、fileA.txt,fileB.txt,fileC.txtの3ファイルがリポジトリにあったとすると fileA.txtfileB.txtは手元にあるファイルの状態にし、fileC.txtだけstashしてた状態のものをとり込むという操作行う場合には、個別にファイルをcheckoutして上書きします。

git checkout --theirs stash@{0} fileC.txt

git stash popでコンフリクトしたらstashは消えないので、git stash dropで削除しておきましょう。

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

$ git stash show stash@{0}

-pで変更内容の詳細をみることもできます。

$ git stash show stash@{0} -p

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

$ git stash clear

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

新規に追加したファイルをaddしていない状態で退避させるには-uもしくは--include-untrackedを使用。

$ git stash -u

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

git stashは新規追加ファイル以外の変更が退避されます。
-kもしくは--keep-indexをつけて実行すると、addした変更は退避されません。

$ git stash -k

まとめ

git stashは結構使うので、aliasでショートカットを作成しておくと便利です。

aliasの設定は以下になります。

https://inokawablog.org/code/git-command-alias/