N2Tの課題でもやっていると,mainから分岐したdevブランチをいったんマージしようとmainブランチに移ったら,「stashしろぼけ」と怒られてしまった.もうちょっと詳しく言うと,mergeができないからいったんdevに戻ろうとしたら,といった感じだ.
以前はブランチを移ってもそんなことを言われなかったので,調べてみた.
どうやらcommitしていようが,コンクリフトの可能性も含めて編集中のブランチから別のブランチに移るのがダメなのだそうだ.その時は
当該ブランチの変更履歴をstashコマンドで一時保存して移れという.私はめんどくさいのでそんなことをしたくないのだけど.
よくよく思い出してうまくmergeができた理由があった.いったんdevブランチをpushして,その後mainに移ってmergeすることで変更履歴をリモートにも保存しつつマージができる,と思う.
まずそもそも分岐元のブランチに移ることの何が問題かというと,ローカルで移動するとmainブランチに今までなかった履歴を持つファイルが存在していることになる.当然ながらcommitされていないので,commitもせず移動すると変更履歴が消されるけど大丈夫かと警告する.これがなかなかだるい.
ってことで,devでcommitを終えたらdevでpushして,mainに移ってmergeするといいのでは,と思った.
実験
devブランチをmainからはやす
ファイルいじってadd
commitする
もう一回変更してadd
commitする
「dev」でpush
remoteで今までなかったdevブランチを確認
checkout & merge(mainに移ってから)
うまいこといく.
グッバイdev
mainでマージ後を念のためpush.成功.
なぜか生き残るdev
あくまでcommit履歴は残すけど,念のためリモートブランチは同期せず残すらしい.
www.freecodecamp.orgより引用.
やる.うまいこといく.
やったぜ.
mergeした履歴が残らないけど,なぜだろう.調査課題.
aブランチを作って,READMEを変更して,aブランチをpushせずにmainにcheckoutしてもmergeができてしまった.ではなぜ前はダメだったのだろう(mainからdevに移るのが問題だったからだと思うけど.) aをmergeしてもmainブランチにはmerge履歴は残らないし,多分aブランチをpushしていないのでリモートリポジトリにはaブランチの形跡が一切ない.
追記
Unlink of file ... failedというエラーがよくあったのだが,これはただ私がHardware Simで当該.hdlファイルを開いたままmergeをするためにcheckoutしようとしたからだった.
メモ:GitHub側のbranch残りは,違う名前でも同じ分岐の仕方であればlogが残されて居る.つまりmainから一階層分岐したbranchであるということだけ記録され,devからdevelopに名前を変えても階層が同じなのでdev時代のlogが残る.