2025年10月28日 星期二

分支移動新體驗(branch、reset)

平常 git reset 指令也沒少使用,但最近很有感,礙於字面上的意義,一般會認定為「重新設定」,

故下意識操作就會特別小心,也不會想到既然可以移動到別的分支的 commit …


插入閱讀更多...


假設有個版控狀態如下所示,bugFix 分支,是從 c2 commit 時所建立的,若此時我想將 bugFix 

這個分支名稱移動到跟 c6 commit 可以嗎?




可以透過 git reset d4c8968 (前期分支要先切換到 bugFix)

 


執行後如下,bugFix 移動到了 d4c8968,當然預設會將路上的異動放到工作區(Unstaged files)

 



而此時,c3 跟 c4 的 commit 其實還在,可以使用 reflog 來查看,需要時也可以再切回來

 


如開頭所說的,私以為該bugFix 只能回到自己所屬路線上的 commit,沒想到可以跨

分支進行,這讓我再次體驗龍哥所說的,reset 其實有點像是 「go to」的意思,只是

曾經異動過的檔案都會重新回到工作區,就看使用者要不要撿。


另外,在這次研究當中,我發現其實有個指令也可以移動分支

git branch -f branchname commit-hash


執行該指令前不能停在該分支身上要先切走,如下所示,需要移動 bugFix 分支

 

執行後,如下所示,但這個好處是,不會產生該分支路線上的異動(Unstaged files)

 


另一種方式,其實分支某種程度也是一個類標籤,既然要將bugFix 分支移動到 c6,

大就刪掉原本的,再重新重新產生一次即可


先刪除分支

git branch -D bugFix



完成後長這樣

 


此時再重新建立一個新的 bugFix 分支


 

 graph 長這樣

 


回過頭來 c3、c4 commit 還在嗎,使用 reflog 查看

 


再次將 bugFix 分支移動到 c4 身上

 


檢視 graph 一切都回來了

 




參考