状況
- ブランチでコミット、作業完了
- master ブランチへマージし忘れた。
- 別の作業を開始して、編集途中。ファイルのへの変更などが既に保存されている。作業ディレクトリには変更があるがステージへは追加していない。
こんな時、ブランチで作業完了時点で master へマージして、新しいブランチを作って作業するべきだった><、とか、だから stash して辻褄を合わせなきゃ><、とか思っておりました。
しかし、特別な退避操作は必要ありませんでした。
作業ディレクトリは編集途中の状態のまま、マージやそのためのチェックアウトをすることができました。
作業ディレクトリ編集途中でも、編集内容を失わずにできた操作概要
- 作業ディレクトリへの変更は、新規ファイル追加だった。
- 別ブランチへのチェックアウト
- マージ
- 新規ブランチを作成し、そこへチェックアウト
具体的な作業記録
$ # ↓マージし忘れ、新しいブランチ作成忘れ、 $ # 作業ディレクトリでは編集してしまった、ステージへは未追加、な状況 $ git status On branch feature1 Untracked files: (use "git add <file>..." to include in what will be committed) document1.xlsx document2.xlsx documentA.docx memo.md nothing added to commit but untracked files present (use "git add" to track) $ # ↓そもそも stash しようとしても、できなかった。 $ # 作業ディレクトリには新規ファイル (=未追跡ファイル) を追加していたため。 $ git stash No local changes to save $ # ↓チェックアウトで作業ディレクトリの内容は変化せず。 $ git checkout master Switched to branch 'master' $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) document1.xlsx document2.xlsx documentA.docx memo.md nothing added to commit but untracked files present (use "git add" to track) $ # ↓マージしても作業ディレクトリの内容は変化せず。 $ git merge --no-ff feature1 Removing memo1.md Merge made by the 'recursive' strategy. memo1.md | 0 memo1renamed.md | 124 +++++++++++++++++++++++++++++++ memo2.md | 55 +++++++++++++++ 3 files changed, 179 insertions(+) delete mode 100644 memo1.md create mode 100644 memo1renamed.md create mode 100644 memo2.md $ git log --all --decorate --graph --oneline * lebc054 (HEAD -> master) Merge branch 'feature1' |\ | * 7f05f6e (feature1) 整理整頓 | * f773303 8割型完成版を追加する | * 174a3dd 2016年2月9日の作業を追加する |/ * 93bd104 最初のコミット $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) document1.xlsx document2.xlsx documentA.docx memo.md nothing added to commit but untracked files present (use "git add" to track) $ # ↓ブランチを作成してそこへチェックアウトしても作業ディレクトリの内容は変化せず。 $ git checkout -b feature2 Switched to a new branch 'feature2' $ git status On branch feature2 Untracked files: (use "git add <file>..." to include in what will be committed) document1.xlsx document2.xlsx documentA.docx memo.md nothing added to commit but untracked files present (use "git add" to track)
おわりに
今回は、すこし不思議な気持ちになりましたの。
作業ディレクトリに変更があっても、それをそのままにコミットを操作できるなんて!
変更が未追跡ファイルの追加のみでしたので、できたことのように思います。
未追跡ファイルのみであったこと、作業が終わってから気が付きました。git は出力されるメッセージが丁寧ですわね!
当たり前のことかもしれませんけれども、とてもびっくりしたので投稿いたしました。
ちなみに、stash といえば以前の苦労いたしました♪
以上です。