用 git 好像避免不了,有時會把檔案弄亂。以前用 SVN 時好像只能重新 checkout。(也有可能有我不知道的方法?)但強大的 git 應該有辦法不需要這麼做,雖然它重新 clone 也很快。
最後我就找到了這篇:
Git 版本控制:利用 git reset 恢復檔案、暫存狀態、commit 訊息
原文寫的蠻清楚的,下面簡單整理一下。
reset 通常會用在幾個狀況:
- 取消已經暫存的檔案
- 恢復 Commit,重新提交 Commit
- 強制恢復到上一版本
一、取消已經暫存的檔案
如果在 add 時不小心把不想 commit 的檔案加入了,我們用 git status 應該會看到類似的畫面
# On branch master其實畫面中就有提示 (use "git reset HEAD <file>..." to unstage) ,可以用 reset 來將某個檔案 unstage。
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: Makefile
# modified: user/easy_setup/easysetup.h
#
所以我們使用
git reset HEAD user/easy_setup/easysetup.h之後會看到 『user/easy_setup/easysetup.h: locally modified』此訊息,這時候在用 git status 看狀態
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: Makefile
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: user/easy_setup/easysetup.h
#
就會發現 user/easy_setup/easysetup.h 已經變成 unstage 了。
二、恢復 Commit,重新提交 Commit
假如今天您修改了檔案,並且已經執行了 git commit -m “first commit”,發現訊息寫錯想要修改,可以透過 reset 方式來做,請先用 git log 方式查看訊息.git log --stat第一種
commit c13eb41110a38ef7145bb8815560641697800659
Author: appleboy <appleboy.tw at gmail.com>
Date: Fri Aug 20 20:02:55 2010 +0800
first commit
Makefile | 10 ++-
user/easy_setup/easysetup.h | 157 ++++++++++++++++++++-----------------------
2 files changed, 79 insertions(+), 88 deletions(-)
git reset --soft HEAD^下完此指令,檔案狀態會回到 "Changes to be committed"
說明可以參考:man page: git reset
第二種
git commit -a -c ORIG_HEADgit 會跳出剛剛的 first commit 讓您來修改,或者是自己用 git commit -m “XXXXXXX” 這樣也可以。說明:man page: git commit
三、強制恢復到上一版本
上面是介紹恢復 commit 訊息,之前修改過的檔案還會存在,底下會使用 reset hard 的方式恢復到上一版本,上一版本跟此版本之間所修改的檔案,將不會存檔,git reset 參數之一 –hardgit reset --hard HEAD~3這指令意思是說,最後三個版本 (HEAD, HEAD^, and HEAD~2) 都不是您想要修改的,你也不想給其他人看見這三個版本資訊,中間的版本將會失去,使用時請小心。
沒有留言:
張貼留言