mercurial 與 git 快速筆記 002 – 取消前一個 commit
注意、以下操作都是 push 之前為佳,push 之後,最好別這麼幹! 除非很確定你有更動遠端倉庫的權利與能力 (包含一一通知倉庫共用者調整其版本歷史,與你的修訂達成一致)
因為某種原因,我們得取消前一個 commit,例如、
- 手殘不小心把 commit 的註解打錯了,硬是看不順眼想改~~
- commit 完以後又改了一些東西,但我想把修改一起併入前面那個 commit
解決方案大致有:
hg rollback
- 他會取消你剛剛的commit,就像undo一樣,回到剛剛尚未 commit 的狀態,但修改都在。
- 此時再次 commit ,就等同於修改註解
- 即使 commit 後還有新的修改也OK,修改不會消失,換句話說,待會你重新commit後,新的修改也就併進來成為同一commit。
hg strip -k -r .
- -k 是只砍 commit 的歷史,但保留你的修改到暫存工作區;而沒加這參數的話,就是直接砍掉commit及其修改。跟下方 git 的 –soft、–hard功能相似。
- -r 後面要加版本號,而上面的 . (英文句點)則是代表最後一個的意思。
- 所以若 -r 2,代表你要一口氣回到本地的第 2 號提交,第 3 號以後的提交你都要抹掉或改掉。
- -r -3,則代表你要往前跳3個提交,原先的最新三個提交你都要抹掉或改掉。
ps. strip 需要擴充mq套件唷! 請到 hgrc 設定[extension] 或打開 Tortosiehg 的設定介面勾選喔!
git commit --amend
- 直接修改最後一次commit的內容,包含檔案組成、註解..等等
- 換言之,新的修改想併入前一個 commit 就用這個指令
git rest --soft HEAD^
- 功能跟上面的 hg rollback 類似,取消最後N個 commit 的紀錄,但是保留修改
- N可以任意,用 HEAD 來控制,HEAD , N=0 ; HEAD^ N=1; HEAD~2 N=2
- –soft 表示:雖然取消 commit,但要保留修改。若參數改為 –hard,表示連修改都不保留,徹底從版本歷史上抹除。跟上面 hg 的 -k 參數功能相似。
Leave a Reply