dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[git]一部のファイルだけstashする、またはstashから取り出す

使う局面が多いのでメモ。

1. 変更中のファイルのうち、一部のみstashする方法

git stash -p

git add -pと同じく、差分のうちどれをstashするかを選択する。

2. 複数の変更中のファイルのうち、特定のファイルのみstashする方法

1 に示す方法だと、

「(git add [ファイル名]のように)A.txt, B.txt, C.txtのうちB.txtの変更だけ全部stashしたい!」

という要望の時はA.txt, C.txtの差分も逐一選択しないといけなくてめんどくさかったり。

その場合、個人的にはこんな方法で対処してます。

# A.txt, B.txt, C.txtのうち、B.txtだけstashしたいという場合

# (1) stashしたいファイル以外をコミット(ローカルだけ)
git add A.txt
git add C.txt
git commit -m '一時コミット(resetする)'

# (2) stashしたいファイルだけが残った状態でgit stash
git stash

# (3) 直前のコミットを取り消す
git reset HEAD~

こんな方法のためにコミットしていいのかなという気はしますが。

3. あるstashから、特定のファイルの内容のみ取り出す

git checkout stash@{[番号]} [ファイル名]

popじゃないのでstashはなくなりません。

リファレンス

transitive.info - git stash 使い方

作業中のファイルをgit stashして、一部のファイルだけ戻す - kentana20 技忘録