1. 程式人生 > >git命令列下回退一個檔案到上一個版本

git命令列下回退一個檔案到上一個版本

git版本控制在ide中,很方便的回退一個檔案,只需要git->revert就可以了。但是有時候,我們會在命令列下操作git。比如部署到生產環境的時候,我們不想打包,而是想通過git pull拉取遠端倉庫中的檔案,但是偶爾需要修改一些檔案,這時候如果需要再次拉取,那麼就可能會出現衝突錯誤。

修改的檔案處於倉庫中最新版本和上次拉取的版本之間。這種問題在開發中如果團隊分工出現問題,大家同時修改了一個檔案,然後一個人先提交了,而另一個人想要提交或著拉取最新檔案的時候就出現衝突了。

[[email protected] webapp]# git pull
Updating 874a967..670bcf6
error: Your local changes to the following files would be overwritten by merge:
        index.html
Please, commit your changes or stash them before you can merge.
Aborting

一般這種問題的解決辦法就是恢復檔案到上一個版本,然後再拉取最新的程式碼,然後將自己修改的部分加入到恢復之後並且拉取到最新的檔案中,再提交就沒有問題了,那麼我們需要解決:如何恢復這個檔案到上一個版本。

這種需要對單個檔案進行回退的解決辦法就是使用checkout,這裡分為兩種情況,預設,我們在命令列下進行的修改是不會把檔案git add到快取中去的,所以一般只需要:

git checkout index.html(檔名),預設情況下,直接git checkout就回退生效了。

還有一種情況,就是如果檔案加入到了git快取中,那麼這個命令就不生效了。需要先執行git reset HEAD index.html。

[[email protected] webapp]# git reset HEAD index.html        
Unstaged changes after reset:
M       index.html

這裡模擬這種情況:對index.html檔案進行修改,增加一行hello。這時候檔案就發生了改變。

 

把檔案加入到快取中,然後直接checkout,發現檔案還是沒有回退,說明checkout沒有生效。 

 

當我們執行了git reset HEAD index.html之後,再次執行git checkout index.html,再次檢視檔案,發現檔案恢復了。