git教程:reset,revert,gitrevert

來源:互聯網
上載者:User

git教程:reset,revert,gitrevert
我們使用版本控制系統的原因之一,就是希望儲存開發開始以來的各種修改,方便找回以前的代碼,或去除錯誤修改。就算是一個人開發,如果沒有版本控制系統,我開發進行到一個地方,發現方向不對,要回頭時,只能再重新開發,或憑記憶修改代碼到以前狀態,那簡直是噩夢。
本文專門介紹一下後悔藥:reset,revert。
先講一下版本,我們要恢複也要知道恢複到哪個版本,git不像svn有版本號碼,只有commit ID,就是那一串40位的十六進位字串,為了方便操作,用HEAD代表最後一次提交,HEAD^表示HEAD的上次提交:

當然要表示從最後數第n次提交也可以用,HEAD~n:

如果只回退最近一次,可以:
git reset HEAD^
或者:
git revert HEAD
這兩個效果是等價的,但實現是不同的:
git reset HEAD^

git revert HEAD

reset是直接把HEAD指向前一個版本,從log裡看,沒有最後一次提交了。
revert是把最後一次提交的修改撤銷,再提交伺服器,從log裡看,多了一個回退提交,原提交也在。
還有,reset預設不修改工作區檔案,回退後,工作區檔案還是原來的,沒回退。
如果加 --hard 會把工作區也回退。
revert預設就把修改合并提交的,出了衝突,才需求手工修改提交。

注意,只有對最後一次提交,他們才是等價的,reset作用是回卷,revert是撤銷。
git reset HEAD~3

git revert HEAD~3


可以看到如果參數是一個版本,revert是只撤銷這個版本作的修改,再合并提交。
而reset則是回退到這個版本,這個版本後的修改都丟掉。
如果從最終結果看,下面命令是等價的:
git reset HEAD~3

git revert HEAD~3..HEAD


revert後面 <版本a>..<版本b>,從<版本b>開始連續回退到<版本a>,但不包括<版本a>,實際也是一個版本一次的回退,每次都會讓你輸入提交注釋。
分別執行上面指令,如果看log,會發現,reset後少了3個log,revert後多了3個log。
revert後如果不想撤銷了,看一下log,reset回去就可以了。
reset後後悔了怎麼辦,沒有log了!沒關係,下面命令可以查到更多commit ID:
git reflog

再輸入:
git reset <commit ID>

這個commit ID是上次reset前的ID,就可以回退會reset以前狀態了。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.