平常 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 一切都回來了
參考
沒有留言:
張貼留言