はじめに
よくあるブランチ切り忘れの記事は、単純に「Git ブランチ切り忘れ」というタイトルだけですが、わかりやすいように 「git add .した後にきりわすれた」 を加えてみました。
簡単に経緯
# 運用状、「test」を親ブランチにしています
% git branch
main
* test
# 他の人もリモートにプッシュを行っているので、 リモートの情報を取得し、リモートのtestをローカルにマージ
% git fetch origin
% git merge origin/test
⚠️ここまでで、何を勘違いしたのか?このままファイルの変更修正を行ってしまいました。
# よーし、実装したいものは一通りできたから、add, commit, pushするか!
% git add .
# あっ、今更だけどブランチも確認しよう
% git branch
main
* test
# オワタ
実際に行った解決までの手順
# 今のtestブランチの状態(ステージした変更も含む)を持ったまま、新ブランチを作成しそこに移動
# ステージした変更(git add .したもの)はそのまま引き継がれます!
% git checkout -b feature/test1
% git commit -m "新しい機能の追加"
% git push origin feature/test1
git addの仕組みがいまいちわからない
❓なぜaddしたものもブランチを切り替えるときに「ついてくる」のか?
調べてみると以下のようなことがわかってきました!
-
git add .は「どのブランチにいるか」に関係あるが、addされた変更はブランチをまたいで持っていける -
git add自体は今いるブランチに対して行う操作だが、git addした内容(=ステージ)は、まだどのブランチにも保存されていない -
git addされた「ステージの中身」は、Git全体の一時的な「共通スペース」に入っている - 最終的に
git commitしたブランチにその変更が「属する」ことになる
参考
- addとcommitの仕組みが猫のイラストでわかりやすい
- もっと丁寧に処理を行っている
- こちらも
stashしている
おわりに
stashしたほうがいいのでしょうか?
今回はこれでうまくいきましたが、何かご存じの方いたらご教示いただきたいです。
つたない説明にはなりましたが、本記事が誰かの参考になればさいわ