git筆記四

c3tc3tc3t發表於2013-10-31

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是當前版本庫的引用,也可以用commitsha1值代替

 

 

 

 

 

 

 

 

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^  撤銷最近的提交 引用回退一次,暫存區工作區全部會退一次,上一次提交消失

 

 

 

 

相關文章