Git でファイルに変更を加えたあとでブランチを切り替える
はじめに
Git Flow などのブランチ構成を採用しているとブランチを切り替え忘れたまま作業をしてしまうことがあります。(ありますよね?)
その場合に "ファイルの変更を維持したまま" ブランチを切り替える方法を残しておきます。
環境
$ git branch
* develop
master
working_branch
作業は working_branch
で行うこととします。
やらかした状況
$ git status
On branch develop
Changes not staged for commit:
modified: sample.txt
develop
ブランチで作業していますね、何を考えているのでしょうか。
正しいブランチに修正
行った変更を破棄して (Discard all changes) ブランチを変更しても良いのですが、一度書いたコードを捨てるのはもったいないので変更を維持したまま対応します。
git stash
を使用して変更を退避させます。
$ git stash
Saved working directory and index state WIP on develop: [コミット情報]
これで変更を退避させました。
状態を確認してみましょう。
$ git status
On branch develop
nothing to commit, working tree clean
develop
ブランチへの変更がなくなりました。
退避したものはどこへ?
$ git stash list
stash@{0}: WIP on develop: [コミット情報]
これが退避した変更です。
では本来の作業ブランチである working_branch
に切り替えて反映させます。
反映させるコマンドは git stash apply
です。
$ git checkout working_branch
Switched to branch 'working_branch'
$ git stash apply
On branch working_branch
Changes not staged for commit:
modified: sample.txt
これで変更を反映させることができました。
複数 stash した際の stash apply について
$ git stash list
stash@{0}: WIP on working_branch: [コミット情報]
stash@{1}: WIP on working_branch: [コミット情報]
stash@{2}: WIP on working_branch: [コミット情報]
stash apply
する際に対象を指定することができます。
例えば 0番目 を指定する場合には
$ git stash apply stash@{0}
On branch working_branch
Changes not staged for commit:
modified: sample.txt
このように stash@{x}
を付与して指定します。
Author And Source
この問題について(Git でファイルに変更を加えたあとでブランチを切り替える), 我々は、より多くの情報をここで見つけました https://zenn.dev/iedred7584/articles/git-change-branches著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol