這裏講一下git revert和git reset的區別: html
git revert 是撤銷某次操做,這次操做以前的commit都會被保留 git
git reset 是撤銷某次提交,可是這次以後的修改都會被退回到暫存區 spa
具體一個例子,假設有三個commit, git st: 3d
commit3: add test3.c htm
commit2: add test2.c blog
commit1: add test1.c 源碼
當執行git revert HEAD~1時, commit2被撤銷了 it
git log能夠看到: test
commit1:add test1.c file
commit3:add test3.c
git st 沒有任何變化
若是換作執行git reset --soft(默認) HEAD~1後,運行git log
commit2: add test2.c
commit1: add test1.c
運行git st, 則test3.c處於暫存區,準備提交。
若是換作執行git reset --hard HEAD~1後,
顯示:HEAD is now at commit2,運行git log
commit2: add test2.c
commit1: add test1.c
運行git st, 沒有任何變化
----------------------------------------------------------------------------------------------
另外,說一下git revert ,git reset –hard和 –soft的區別
git reset –mixed id ,是將git的HEAD變了(也就是提交記錄變了),但文件並無改變,(也就是working tree並無改變)。
git reset –soft id. 實際上,是git reset –mixed id 後,又作了一次git add
git reset –herd id.是將git的HEAD變了,文件也變了。
git revert與git reset最大的不一樣是,git revert 僅僅是撤銷某次提交。
好比git revert HEAD~1 ,那麼會撤銷倒數第二次的提交結果。而倒數第一次的提交記錄,仍然在。
若是git reset –hard HEAD~1,那麼,commit退回到倒數第三次的狀態中。
整體來說,仍是git revert 好啊,雁過留聲嘛。
其實,經過git reset –soft id的方法,能夠將原來屢次的git提交記錄合併爲一個。
git reset是指將當前head的內容重置,不會留log信息。
----------------------------------------------------------------------------------------------
根據–soft –mixed –hard,會對working tree和index和HEAD進行重置:
git reset -soft :取消了commit
git reset -mixed(默認) :取消了commit ,取消了add
git reset -hard :取消了commit ,取消了add,取消源文件修改
====
http://hi.baidu.com/lingzhixu/blog/item/569f45c4cbf39925f8dc619e.html