玩转GIT系列之【如何放弃本地/服务器端所做的修改】
今天遇到一個問題,就是在git工程下修改了一些代碼,結果發現搞錯了,需要撤銷掉所有改動的內容,還原到之前的初始版本,換言之就是放棄自己在本地所做的修改。該怎么做呢?要分以下幾種情況來區別對待:
一、尚未使用“git add”緩存過代碼
1、對于指定的單個文件,可以使用下面的命令放棄對它的修改:
git checkout -- filename # 比如:git checkout -- readme.md注意:不要忘記中間的 “–” ,不寫就成了檢出分支了!!
2、若想放棄所有的文件修改,可以使用下面的命令:
git checkout . # 注意checkout后面有一個空格,然后帶一個.號注意:此命令用來放棄掉所有還沒有加入到緩存區(就是 git add 命令)的修改:內容修改與整個文件刪除。但是此命令不會刪除掉剛新建的文件。因為剛新建的文件還沒已有加入到 git 的管理系統中。所以對于git是未知的。自己手動刪除就好了。
3、若想要刪除新增的文件,除了手動刪除外,也可以使用下面的命令:
git clean -df # 從工作目錄中移除沒有track的文件4、綜上,若想要徹底放棄全部修改的內容(包括新增的文件,以及對現有文件的修改),則可以一次性使用下面的命令:
git checkout . && git clean -df # 注意checkout后面有一個空格,然后帶一個.號注意:這里用到了git clean命令,這個命令主要是用來從你的工作目錄中刪除所有沒有tracked過的文件,具體的用法,可以參見我的另外一篇博客(玩轉GIT系列之【git clean的用法】)。
二、已經使用“git add”緩存了代碼
1、對于指定的單個文件,可以使用下面的命令放棄對它的修改:
git reset HEAD filename # 比如:git reset HEAD readme.md2、若想放棄所有的文件修改,可以使用下面的命令:
git reset HEAD . # 注意checkout后面有一個空格,然后帶一個.號注意:此命令用來清除 git 對于文件修改的緩存。相當于撤銷 git add 命令所在的工作。在使用本命令后,本地的修改并不會消失,而是回到了(一)所示的狀態。繼續用(一)中的操作,就可以放棄本地的修改。
三、已經用“git commit”提交了代碼
1、若想要回退到前一次commit的狀態,可使用下面的命令:
git reset --hard HEAD^ # 注意HEAD后面有一個^符注意:在windows的cmd控制臺下輸入上述命令時,系統有可能會提示more?,讓你繼續補充,多按幾次回車后就報錯如下:
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'這是因為cmd控制臺中換行符默認是^,而不是\ ,所以它的more?的意思是問你下一行是否需要再輸入,而^ 符號就被當做換行符而被git命令忽略掉了。
解決方法有如下幾種:
- 加引號:git reset –hard “HEAD^” ;
- 加一個^:git reset –hard HEAD^^ ;
- 換成~:git reset –hard HEAD~ 或者 git reset –hard HEAD~1(~ 后面的數字表示回退幾次提交,默認是一次);
2、若想要回退到指定的某一次commit的狀態,則使用下面的命令:
git reset --hard commitid # 這里的commitid是一個代號,如下注釋注意:這里的commitid就是提交時的標簽,可通過git log命令查看,如下所示:
commit 47895838a4fbe867ba9a170c6d1ea6a794095025 Author: Peng Fan <peng.fan@nxp.com> Date: Tue Dec 27 20:19:07 2016 +0800imx: mx6sllevk: add MAINTAINERS fileadd MAINTAINERS filesSigned-off-by: Peng Fan <peng.fan@nxp.com>Cc: Stefano Babic <sbabic@denx.de>commit d3c083a94722ab9089b6085ef9e95dd4858bc206 Author: Jaehoon Chung <jh80.chung@samsung.com> Date: Tue Dec 27 20:08:13 2016 +0900board: samsung: update the MAINTAINERS fileUpdate the maintainer from Przemyslaw and Lukasz to me.Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>總結
以上是生活随笔為你收集整理的玩转GIT系列之【如何放弃本地/服务器端所做的修改】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《角斗士2》明年上映
- 下一篇: 玩转SVN系列之【如何放弃本地/服务器端