今回取り扱うGitコマンド
・git stash
初めに作業ブランチの変更を一時的に隠すことができるgit stash
コマンドを試してみます。
このコマンドは「変更内容をコミットしたくないけど別の作業をしたくなったから保存しておきたいな~」という時に使います。
まず、git-studyディレクトリを開きmainブランチから新たにブランチを切っていきます。
折角なので前回試したgit switch
コマンドを使用します。
$ git switch -c study/stash
study/stashブランチが作成できたらstudy.txtを以下のように変更していきます。
- Hello New Branch!
+ Test For Stash Command
保存したらターミナルから以下のコマンドを実行してスタッシュに変更内容を隠していきます。
$ git status
On branch study/stash
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: study.txt
no changes added to commit (use "git add" and/or "git commit -a")
→ git statusコマンドでstudy.txtが変更されたことを確認
$ git stash push -m "スタッシュに変更内容を隠すときのメッセージ"
Saved working directory and index state On study/stash: changed the text
→ メッセージが必要ない場合は git stash -u コマンドでも可
$ git status
On branch study/stash
nothing to commit, working tree clean
→ もう一度git statusコマンドを実行すると変更内容が隠されていることが確認できる
スタッシュへ変更を隠すことに成功しました。
study.txtも元の文章に戻っていますね。
次に、どのようなスタッシュがあったか、そこにどのような変更内容を隠したかを確認するコマンドを試してみます。
$ git stash list
stash@{0}: On study/stash: changed the text
→ スタッシュのリストを出力する
$ git stash show
study.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
→ スタッシュの変更内容を出力する
流石に隠した変更内容の詳細まではわからないようですね。。。
しかし一目でスタッシュの状態を確認することができました。
では、スタッシュに隠した変更を戻してみましょう。
コマンドが2種類あるのですが、違いは以下の通りになります。
$ git stash pop
→ 変更内容を戻した後スタッシュのリストから削除する
$ git stash apply
→ 変更内容を戻した後スタッシュのリストから削除しない
今回は残す必要がないためgit stash pop
コマンドで変更内容を戻していきます。
実行すると、study.txtが今回変更した内容に戻り、git stash list
コマンドを実行してもスタッシュリストが空であることが確認できます。
その他にも、git stash
コマンドには以下のような機能があります。
・直近に保存した変更内容を戻さずにスタッシュリストから削除したい場合
$ git stash drop
・全てのスタッシュをリストから削除したい場合
$ git stash clear
・git stash drop
コマンドやgit stash pop
コマンドなどでスタッシュを指定したい場合
$ git stash drop stash@{n}
$ git stash pop stash@{n}
nの部分はgit stash list
コマンドで確認可能です。
今回は以上となります。
前のプロジェクトまでTortoiseGitというGitコマンドを使わなくてもボタンぽちぽちしているだけでGitの操作ができてしまう便利なツールを使っていたのですが、コマンドの方が早くできますし何だか格好良くていいですね。笑
個人的によく使っていた「スタッシュへ変更を隠す」という機能も今回紹介したみたいに様々な機能がありましたし、これから勉強できるのが少し楽しみになりました。
ここまで読んでいただきありがとうございました。