setoya-blog

システム開発技術、データ分析関連でお勉強したことや、山奥生活を綴る、テンション低めなブログです。

間違って別のブランチで実装を始めちゃった時にgit stashで別ブランチに編集中のソースを移動する

Git - Stashingの手抜き翻訳かつ、勝手に構成や説明の流れを変えたものです。


間違ってmasterブランチなどで実装を始めたのに途中で気づいて、開発用のdevelopmentブランチにその書きかけのソースをコミットすることなく持って行きたいときは、git stashを使う。

書きかけだとgit statusとしたときに色々でるはず。

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   index.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   lib/simplegit.rb
#


書きかけのソースをコミットせずに、以下のコマンドを入力する。

$ git stash

そうすると、一時フォルダ的なstashリストに書きかけだったソースが退避されて登録されるので、git statusも以下のようになる。

$ git status
# On branch master
nothing to commit (working directory clean)

今退避されているソースのリストは、git stash listコマンドで確認できる。

$ git stash list
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051... Revert "added file_size"
stash@{2}: WIP on master: 21d80a5... added number to log


この状態でコードを持って行きたい適当なブランチに切り替える。
ブランチの切り替え方はgitのローカルbranchを作成し、リモートにpushする - sessanの日記参照。

ブランチを切り替えた後、最後にstashしたものを反映したい場合は、

$ git stash apply 


とする。

特定のstashリストを指定して反映したい場合は、

$ git stash apply stash@{2}


のように、stash listで表示されていた名前を指定してapplyする。