git 修改歷史踩雷紀錄
學習時參考資料
高見龍 為你自己學 Git :
https://gitbook.tw/chapters/rewrite-history/change-commit-message
主要關鍵核心 : git rebase
除了git rebase之外也有其他可以使用 –amend 參數來進行 Commit
可以用來更改最後一個的commit紀錄,這部分詳情可以看這篇,講的很完善:
https://gitbook.tw/chapters/using-git/amend-commit1
但假如可能不只一筆自己想要更改的commit訊息,可能很多,那就會需要用到rebase的指令互動模式。
git rebase -i
或是 git rebase --interactive
-i = –interactive
互動指令=>
- pick:預設都是這個指令,代表會使用這個 Commit。
- reword:使用這個 Commit,但是執行到此 Commit 時會開啟 vim 供更改 Commit 訊息。
- edit:使用這個 Commit,但是執行到此 Commit 時會暫停,直到執行 git rebase –continue。
- squash:將這個 Commit 與前一個 Commit 合併,訊息也會合併。
- fixup:與 squash 相同,但會捨棄這個 Commit 的訊息。
- drop:刪除這個 Commit,結果同直接刪除行。
自己實作
把這兩個歷史紀錄給合併成一個,會變這樣
使用的是:squash
失敗 卡住 出不去
無法再次執行rebase問題
git-rebase-todo 問題
出去的問題解決了:電腦問題,一時鍵盤沒反應
失敗紀錄
失敗過程:
使用git rebase修改完後,第一時間退出來並沒有進到下一步的編輯模式,而是直接退出到最初的狀態,歷史紀錄沒有發生任何變化,並且無法再次進行rebase,按照git給的提示(You can fix this with ‘git rebase –edit-todo’ and then run ‘git rebase –continue’)使用了git rebase –edit-todo,一番操作下來把整個歷史都給消逝殆盡。
最初狀態:
失敗後狀態:
那是如何解決
首先我先去佳萱求助
=>解決不了,一起再找ttn,最後解決了
核心失敗結論:我使用了兩個S 還有亂使用一些自己不懂的指令 所以最終毀掉全部
ttn解決思路:
- 最新狀況已經沒救了,先還原到還沒毀滅的歷史
先使用 git reflog 查清楚歷史脈絡
再使用git reset跳回還沒有毀滅的世界線,並且使用git log再次確認已跳回
這邊要特別注意的是,使用了–hard參數之後,假如你有東西還尚未保存,那當你成功跳躍世界線後,那些東西也會一起跟你說再見。
- 恢復正常再來一次,反正壞掉沒差
要先用git rebase –abort 把之前互動的消失掉
git rebase -i再來一次
成功後再檢查一下