[備忘] Git stashコマンド
まだコミットしていないファイルの変更をstashに一時的に退避しておくことができます。 よく忘れるので覚えているうちにまとめます。
作業内容をstashに退避
ローカルの変更をstashに保存し、HEADにロールバックします。
$ git stash- uまたは-include-untrackedをつけるとGitが追跡していない新規ファイルも対象に含めることができます。 ※git stash pushの省略形
stashの一覧を確認
$ git stash list
stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation
stash@{1}: On master: 9cc0589... Add git-stash- stash@{n}の数値が0のものが最新のスタッシュです。
- onの後がブランチ名です。
- :の後はstashを追加したときのコミットハッシュとコミットメッセージです。 スタッシュに名前をつけた場合はスタッシュにつけた名前になります。
stashを反映し削除する: pop
stashの変更内容をローカルに反映し、stashを削除します。
最新のスタッシュを反映する場合は以下のように実行します。
$ git stash pop以下のように、スタッシュ番号を指定することで特定のスタッシュを反映します。
$ git stash pop <n><n>にstash@{n}の数値を指定します。
stashを反映する: apply
stashの変更内容をローカルに反映します。 popと異なり、stashからは削除されません。
最新のスタッシュを反映する場合は以下のように実行します。
$ git stash applypopと同様に、スタッシュ番号を指定することで特定のスタッシュを反映します。
$ git stash apply <n><n>にstash@{n}の数値 nを指定します。
stashを削除する
$ git stash drop <n><n>にstash@{n}の数値を指定します。
stashに名前をつけて退避したい場合
stashに名前をつけて退避したい場合は、m オプションを指定してpushします。
$ git stash push -m "stash-name-sample"名前をつけたstashの変更を反映する
$ git stash pop stash^{/stash-name-sample}
スタッシュに名前を付ける関数定義
stackoverflowで見つけた便利な関数をご紹介します。 ※お使いのシェルによって定義ファイルを読み替えが必要です。
.zshrc
function gitstash() {
git stash push -m "zsh_stash_name_$1"
}
function gitstashapply() {
git stash apply $(git stash list | grep "zsh_stash_name_$1" | cut -d: -f1)
}使用例
gitstash nice
gitstashapply nice参考
https://git-scm.com/docs/git-stashhttps://stackoverflow.com/questions/11269256/how-do-i-name-and-retrieve-a-git-stash-by-name