- 回復至最近一次commit(所有檔案)
$ git reset --hard HEAD
- 還原修改過的單一檔案
有以下不同的方法
//以下從staging取出 $ git checkout hello.txt //1 $ git checkout -- hello.txt //2 $ git checkout -f hello.txt //3 //以下從HEAD最新版取出 $ git checkout HEAD hello.txt //4
ex. 假設HEAD的hello.txt 如果為hello
$ echo 'hi' > hello.txt //這時三者皆相同 $ git add . //放到staging,這時1,2,3取到staging(hi),4取到hello
感謝Charlie Lee的訂正,本以為-f也會取到hello
話說不知道當初為何要看-f參數,這參數是用在"強制換"branch時,不理會當下修改的檔案,跟"還原"檔案沒什麼關係 XD
可能當初還不太懂,看著人家寫就照抄 - Staging(git add)後,要退回unstage
$ git reset HEAD file
- 回復特定版本
雖說是回復,但其實是將指定的版本新增為最新的commit
不過通常回復到舊版本,是要繼續往下開發$ git revert commit_name
所以勢必得再一次commit
所以如果只是要回復且不要commit 可以加 -n or --no-commit
如果要修改的話 得commit或放棄,否則沒辦法回復$ git revert -n commit_name
- fatal: Commit 137ea95 is a merge but no -m option was given.
因為該commit為merge(兩個branches合併,所以得指定要回復的branch (-m or --mainline option) 搭配數字 1 or 2 指定第幾個commit
- fatal: Commit 137ea95 is a merge but no -m option was given.
- 從commit裡,指定checkout檔案
格式:git checkout SHA /file/to/path
$ git checkout 35216 controller/ui.php
- 從branch裡,指定checkout檔案
格式:git checkout <branch_name> <paths> #會在相同的資料夾找
格式:git checkout <branch_name> -- <paths>
$ git checkout branch_b test.php //從branch_b取出test.php
- 改變最後一次的 Commit的訊息
git commit --amend (改git log的內容)
星期日, 10月 09, 2011
git還原 - revert, reset, checkout
訂閱:
張貼留言 (Atom)
2 則留言:
$ git checkout hello.txt
$ git checkout -- hello.txt
$ git checkout -f hello.txt
以上三種從staging取出
$ git checkout HEAD hello.txt
這個會從最後版本取出
git version 1.8.3.msysgit.0
我的git版本
不確定是否版本不同而不一樣
上次確實遇到有版本不同的問題~
我就先註記一下
張貼留言