git命令列下回退一個檔案到上一個版本
阿新 • • 發佈:2019-01-09
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,再次檢視檔案,發現檔案恢復了。