git log --graph --oneline 中的--oneline相當於 --pretty=oneline但是可以顯示更短小的id
git reset --hard HEAD^
git reset --hard <commit的sha1值>可以回滾到任何一次commit
回滾後就回不去了
用reflog挽救錯誤的重置
檢視分支日誌檔案
tail -5 .git/logs/refs/heads/master
git reflog show master | head -5
git reset --hard master@{2} 回到剛才沒回滾之前的狀態
git log --oneline
git reflog 可以檢視所有分支的所有操作記錄(包括(包括commit和reset的操作),包括已經被刪除的commit記錄,git log則不能察看已經刪除了的commit記錄
具體一個例子,假設有三個commit, git st:
commit3: add test3.c
commit2: add test2.c
commit1: add test1.c
如果執行git reset --hard HEAD~1則 刪除了commit3,如果發現刪除錯誤了,需要恢復commit3,這個時候就要使用git reflog
git reflog show master | head -5
git reset -q HEAD test.ini
使用版本庫中的test.ini檔案,替換掉暫存區的
HEAD是當前版本庫的引用,也可以用commit的sha1值代替
git reset -- hard <commit>
1 版本庫的master引用指向上一次commit
2 替換暫存區,暫存區內容和目錄樹一致(也就是和版本庫一致)
3 替換工作區,工作區的內容變得和暫存區一樣
git reset --soft <commit>
1 版本庫的master引用指向上一次commit
2 暫存區不變
3 工作區不變
git reset --mixed(預設的。加不加都行) <commit>
1 版本庫的master引用指向上一次commit
2 替換暫存區,暫存區內容和目錄樹一致(也就是和版本庫一致)
git reset
1 head指向的目錄樹重置暫存區,工作區不會受影響 就是說,將版本庫的內容替換掉暫存區的內容。
執行的 git add的內容都撤銷 ,
git reset head 同上
git reset -- filename 將filename撤出暫存區 暫存區其他檔案不變,相當於git add filename的反向操作
git reset HEAD filename 同上
git reset --soft HEAD^
工作區暫存區不變 引用倒退一次。(引用指得就是版本庫的head指向的最新commit),當對最新的commit不滿意時,撤銷
git commit --amend 對最新的提交修補提交說明 相當於執行了下面兩條命令
git reset --soft HEAD^
git commit -e -F .git/COMMIT_EDITMSG
git reset HEAD^
工作區不變 但是暫存區會回退到上一次提交之前,引用也回退一次
git reset --mixed HEAD^同上
git reset --hard HEAD^ 撤銷最近的提交 引用回退一次,暫存區工作區全部會退一次,上一次提交消失