在GIT中修改提交記錄


在SVN中,提交記錄是無法修改的。比如說,當我們提交了某次修改后,發現該次提交中有錯誤時,只能將將補丁再次提交一遍。這樣,就存在兩次提交記錄,沒有保證提交的原子性。

在GIT中,由於提交是在本地進行的,因此如果沒有發布之前,是允許使用reset命令來撤銷提交記錄的,這個命令有如下三種使用方式:

  1. git reset -soft: 只撤銷commit,保留working tree和index file。
  2. git reset -mixed: 撤銷commit和index file,保留working tree
  3. git reset -hard: 撤銷commit、index file和working tree,即撤銷銷毀最近一次的commit

默認是-mixed,不過我沒有看出來mixed和soft有什么區別,都是把日志歷史給reset了,內容保持不變。而hard則是把日志連同內容一起回退了,類似於回滾。

日志可以reset的好處是:可以隨時commit,這樣就不用擔心后面的修改影響到前面,commit日志也可以不用填得很規范。每完成一個迭代后,再把之前的所有commit全部給reset掉,重新寫一個能正規的注釋,發布到服務器。

修改已經發布的修改

如果你的提交已經發布,reset后發布時會將服務器上的提交記錄給同步下來,進行一次merge后再次發布。此時就GIT的工作方式是和SVN一樣的了。此時,如果要修改服務器段的提交記錄,則可以使用使用了園子里的一篇文章:Git如何永久刪除文件(包括歷史記錄)中介紹的強制推送的命令:

    git push origin master --force

先reset,本地提交后,用該命令強制發布,此時服務器的提交記錄就會被被本地提交記錄覆蓋。

需要注意的是:修改已經發布的提交是有很大的有風險的,會導致無法回退到歷史版本。這也是SVN不允許修改提交記錄的原因。雖然GIT提供了這個命令,但不到萬不得已的時候不建議使用它。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM