這是剛剛才發生的事,新鮮出爐
在完成短網址產生器的作業後,正準備將檔案上傳 Github
建立了新的 respository ,就像之前練習開新分支和合併一樣,按下了 merge 以後……
等愣!跳出了錯誤訊息:
refusing to merge unrelated histories
在驚恐之餘,趕緊搜尋了這個訊息
裡面提到的方式是直接設定成允許合併
但能用圖形化介面處理的事情就先不用命令(x)
我注意到網頁中一個相關連結上的「rebase」
這個指令在我使用 sourcetree 的時候就有看到,就在 merge 旁邊
於是我動手開始查這兩個指令的差異
簡單的列出差異點如下:
*Merge
1. 在主分支上對副分支執行,將副分支合併進來
2. 不影響歷史紀錄
3. 會建立一個新的 commit 用來 merge
*Rebase
1. 在副分支上對主分支執行,副分支將會接到主分支後面
2. 會更動歷史紀錄(commit的時間等)
3. 不會建立用來 rebase 的 commit
副分支會複製一份新的 commit(SHA-1值不同) 接到主分支後面
考量到將以 Github 的分支為主
我嘗試了在本機端的分支對來自 Github 的分支執行 rebase
伴隨著進度條完成,畫面上的 commit 變為同一條分支
而我原先本機端參差不一的 commit 建立日期瞬間全部變得一模一樣
雖然 commit 依然按照先前的順序一個不少的在上面,但心中有種什麼不見了的感覺……(是歷史紀錄)
為了寫這篇文章,我又重新回去翻了遍參考連結
裡面有提到 rebase 的主副誰先誰後,以最後的檔案來說沒什麼差別
那如果我以 Github 的分支,對本機端的分支執行 rebase 呢……?
按照參考連結的內容,我試著 reset 回還沒 rebase 的 commit 上
但是本機端的 commit 的 date 並沒有改變,看來是回不去了(?)
之後有機會再試試看用新分支 rebase 本機的分支好了