3
3

git stash で作業を一時保存:ブランチ切り替えの際,変更差分が残っていて切り替えができない...なんてことないですか?

Last updated at Posted at 2024-09-30

あるブランチで作業していて他のブランチに移動した際にせっかくした作業が消えてしまった(または、ブランチ移動できないというエラーが出る)ことはありませんか?
git stashというコマンドを用いるとそのような作業中の差分を一旦退避できます!

先に結論
stashした後に変更を破棄してブランチを切り替えてその後stashしたものを適用する.という流れで変更差分が残っていてブランチ切り替えができる.

gitそのものの概念やgitコマンドのチートシートはこちらから

git stashとは
作業中の変更を一時的に保存し,後で再適用するためのGitコマンドである

git stashは以下のような状況で特に有用である

  • 作業中に緊急の修正が必要になった場合
  • ブランチを切り替える前に現在の作業を保存したい場合
  • プルする前に競合を避けたい場合

変更を一時保存する

git stash push

または、メッセージを付けて保存

git stash push "作業中の変更"

このコマンドはgitオブジェクトとして追跡済みの場合(addした場合など)のみstashする

追跡外のファイル含めて変更を一時保存

git stash push -u

追跡外のファイルを含めてstashする.addしていないファイルもstashしたい場合はこのコマンドを使う

保存した変更(stash)の一覧を表示

git stash list

最新のstashを適用する

stashを適用とは作業ディレクトリにstash listに一時保存した状態を適用するということ.これをすると,最新のstashはstashリストから削除される

git stash pop

適用した後にコミットすれば作業ツリーに履歴が残る

git commit -m "コミットメッセージ"

最新のstashを適用するが、stashリストからは削除しない

git stash apply

特定のstashを適用

git stash apply stash@{n}

ここで、nはgit stash listで表示されるインデックス番号

最新のstashの内容を確認

git stash show

より詳細な差分を見るには

git stash show -p

特定のstashを削除

git stash drop stash@{n}

全てのstashを削除

git stash clear

変更差分が残っている状態でブランチ切り替えをする

1.変更差分をstashする

git stash push -u

2.変更差分を破棄する

git restore .

3.ブランチを作成する

git switch -c <new-branchname>

4.最新のstashを適用

git stash apply

stashの注意点

  • stashはグローバルであり、全てのブランチで共有される
  • 複数のstashを管理する場合は、わかりやすい名前を付けることが推奨される
  • 長期間stashを放置すると、コンテキストを忘れる可能性があるため注意が必要

git stashを効果的に使用することで、作業の流れを中断することなく、柔軟にタスクを切り替えることができる。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3