一時退避

記事の内容

概要

stashコマンドは、作業中の変更を一時的に保存するために使用します。
※一時的に退避させ、ブランチを切り替えたいときに便利

stash
作成方法

git stash

$ ls -l
drwxr-xr-x  13 tomoji  tomoji  416  3  4 12:34 .git
-rw-r--r--  1  tomoji  tomoji    0  3  4 12:34 file1.txt

『ブランチ一覧』
$ git branch
* main

『新しいブランチ作成してチェックアウト』
$ git checkout -b future/new_function

『ブランチ一覧』
$ git branch
* future/new_function
  main

『vim編集』
$ vim file1.txt

【vimでfile1.txtを編集して保存】

edited

:wq
『チェックアウト』
$ git checkout main
error: Your local changes to the following files would be overwritten by checkout:
	file1.txt
Please commit your changes or stash them before you switch branches.
Aborting

『編集内容を一時退避』
$ git stash

『チェックアウト成功』
$ git checkout main
Switched to branch 'main'

退避リスト表示

stash list
作成方法

git stash list

$ ls -l
drwxr-xr-x  13 tomoji  tomoji  416  3  4 12:34 .git
-rw-r--r--  1  tomoji  tomoji    0  3  4 12:34 file1.txt

『ブランチ一覧』
$ git branch
* future/new_function
  main

『vim編集』
$ vim file1.txt

【vimでfile1.txtを編集して保存】

edited

:wq
『チェックアウト』
$ git checkout main
error: Your local changes to the following files would be overwritten by checkout:
	file1.txt
Please commit your changes or stash them before you switch branches.
Aborting

『編集内容を一時退避』
$ git stash

『スタッシュリスト表示(edited file1は最終コミット履歴)』
$ git stash list
stash@{0}: WIP on future/new_function: c6efe22 edited file1

『再度vim編集』
$ vim file1.txt

【再度vimでfile1.txtを編集して保存】

edited

:wq
『編集内容を一時退避』
$ git stash

『スタッシュリスト表示』
$ git stash list
stash@{0}: WIP on future/new_function: c6efe22 edited file1
stash@{1}: WIP on future/new_function: c6efe22 edited file1

退避変更を適用(リスト追加)

stash apply
作成方法

git stash apply

$ ls -l
drwxr-xr-x  13 tomoji  tomoji  416  3  4 12:34 .git
-rw-r--r--  1  tomoji  tomoji    0  3  4 12:34 file1.txt

『ブランチ一覧』
$ git branch
* future/new_function
  main

『vim編集』
$ vim file1.txt

【vimでfile1.txtを編集して保存】

edited for stash apply

:wq
『チェックアウト』
$ git checkout main
error: Your local changes to the following files would be overwritten by checkout:
	file1.txt
Please commit your changes or stash them before you switch branches.
Aborting

『編集内容を一時退避』
$ git stash

『チェックアウト成功』
$ git checkout main
Switched to branch 'main'

『mainでの確認後に元の編集していたブランチに戻る』
$ git checkout future/new_function
Switched to branch 'future/new_function'

『編集していた状況に戻す』
$ git stash apply
On branch future/new_function
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   file1.txt

no changes added to commit (use "git add" and/or "git commit -a")

『スタッシュのリストを残す』
$ git stash list
stash@{0}: WIP on future/new_function: c6efe22 edited file1

退避変更を適用(リスト削除)

stash pop
作成方法

git stash pop

$ ls -l
drwxr-xr-x  13 tomoji  tomoji  416  3  4 12:34 .git
-rw-r--r--  1  tomoji  tomoji    0  3  4 12:34 file1.txt

『ブランチ一覧』
$ git branch
* future/new_function
  main

『vim編集』
$ vim file1.txt

【vimでfile1.txtを編集して保存】

edited for stash pop

:wq
『チェックアウト』
$ git checkout main
error: Your local changes to the following files would be overwritten by checkout:
	file1.txt
Please commit your changes or stash them before you switch branches.
Aborting

『編集内容を一時退避』
$ git stash

『チェックアウト成功』
$ git checkout main
Switched to branch 'main'

『mainでの確認後に元の編集していたブランチに戻る』
$ git checkout future/new_function
Switched to branch 'future/new_function'

『編集していた状況に戻す(スタッシュ履歴を削除する)』
$ git stash pop
On branch future/new_function
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   file1.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (9b7e75acb1a30c3c1f8f91a4b85b13d5b4b5877e)

『スタッシュリスト』
$ git stash list

スタッシュ履歴削除

最新スタッシュ

stash drop
作成方法

git stash drop

『スタッシュリスト表示』
$ git stash list
stash@{0}: WIP on future/new_function: 66fb8ba edited3
stash@{1}: WIP on future/new_function: 11b8c5a edited2
stash@{2}: WIP on future/new_function: 6c9157c edited1

『最新スタッシュを削除』
$ git stash drop
Dropped stash@{0} (66fb8ba7832ddc4f002ad5417265cd3b681e7502)

『スタッシュリスト表示』
$ git stash list
stash@{0}: WIP on future/new_function: 11b8c5a edited2
stash@{1}: WIP on future/new_function: 6c9157c edited1

特定スタッシュ

stash drop 指定番号
作成方法

git stash drop stash@{番号}

『スタッシュリスト表示』
$ git stash list
stash@{0}: WIP on future/new_function: 66fb8ba edited3
stash@{1}: WIP on future/new_function: 11b8c5a edited2
stash@{2}: WIP on future/new_function: 6c9157c edited1

『特定のスタッシュを削除』
$ git stash drop stash@{1}
Dropped stash@{1} (11b8c5af03d5b042d0b57229ef9d5d68c18af249)

『スタッシュリスト表示』
$ git stash list
stash@{0}: WIP on future/new_function: 66fb8ba edited3
stash@{1}: WIP on future/new_function: 6c9157c edited1

全てのスタッシュ

stash clear
作成方法

git stash clear

『スタッシュリスト表示』
$ git stash list
stash@{0}: WIP on future/new_function: 66fb8ba edited3
stash@{1}: WIP on future/new_function: 11b8c5a edited2
stash@{2}: WIP on future/new_function: 6c9157c edited1

『全てのスタッシュを削除』
$ git stash clear

『スタッシュリスト表示』
$ git stash list
記事の内容
閉じる