在SVN中,提交記錄是沒法修改的。好比說,當咱們提交了某次修改後,發現該次提交中有錯誤時,只能將將補丁再次提交一遍。這樣,就存在兩次提交記錄,沒有保證提交的原子性。html
在GIT中,因爲提交是在本地進行的,所以若是沒有發佈以前,是容許使用reset命令來撤銷提交記錄的,這個命令有以下三種使用方式:git
默認是-mixed,不過我沒有看出來mixed和soft有什麼區別,都是把日誌歷史給reset了,內容保持不變。而hard則是把日誌連同內容一塊兒回退了,相似於回滾。服務器
日誌能夠reset的好處是:能夠隨時commit,這樣就不用擔憂後面的修改影響到前面,commit日誌也能夠不用填得很規範。每完成一個迭代後,再把以前的全部commit所有給reset掉,從新寫一個能正規的註釋,發佈到服務器。spa
修改已經發布的修改 日誌
若是你的提交已經發布,reset後發佈時會將服務器上的提交記錄給同步下來,進行一次merge後再次發佈。此時就GIT的工做方式是和SVN同樣的了。此時,若是要修改服務器段的提交記錄,則可使用使用了園子裏的一篇文章:Git如何永久刪除文件(包括歷史記錄)中介紹的強制推送的命令:htm
git push origin master --forceblog
先reset,本地提交後,用該命令強制發佈,此時服務器的提交記錄就會被被本地提交記錄覆蓋。get
須要注意的是:修改已經發布的提交是有很大的有風險的,會致使沒法回退到歷史版本。這也是SVN不容許修改提交記錄的緣由。雖然GIT提供了這個命令,但不到萬不得已的時候不建議使用它。同步