refs/heads/master 是乙個游標,當有新的提交發生時,master分支會指向新的commit,使用git reset
將master(游標)指向任意乙個commit id
git
reset--
hard
head^#-
-hard引數會破壞工作區未提交的改動。
(1)通過git log --graph --oneline
來檢視所有提交的id
(2)git reset --hard a810291
執行命令將git重置到這一次提交
(3)重置後發現工作區檔案也變成了這次提交的狀態
使用git reset
命令會徹底的丟棄重置點之後的所有提交。
只能通過commit id來恢復這些提交
帶有工作區的版本庫都提供分支日誌功能。
用以下命令檢視該引數
git config core.logallrefupdates
#執行後會顯示true
用tail命令檢視master分支日誌
tail 5
.git/logs/refs/heads/master
會發現logs下的這個master檔案記錄了master分支的變遷,最新的改變會追加在這個檔案的末尾,通過git reset –hard恢復重置以後,通過git log --oneline
來檢視提交歷史,會發現通過reset丟失的commit歷史也回來了。
通過git reflog的子命令show也可以檢視logs中的master檔案
git reflog show master
,git reflog會給每個commit id提供乙個好記得名稱,格式為@
,可以用git reset到這一名稱直接重置到這乙個commit。
git reset有兩種形式
這一種commit不會改變master指向,也不會改變工作區,而是用指定commit的檔案paths來替換暫存區的檔案
這一種用法會重置引用,根據引數不同,可以對暫存區或工作區進行重置。
使用git reset --hard
1.改變master指向。將完整的commit id賦予master游標
2.改變暫存區。master游標用該commit id指向的內容改變暫存區
3.改變工作區。用objects中的檔案覆蓋工作區檔案。操作後,工作區與暫存區與head指向的目錄樹相同。
使用git reset --soft
執行--hard
引數的第一步,而不改變暫存區和工作區
使用mixed(預設)
執行--hard
引數的1、2步,而不改變工作區。
git reset
:相當於git reset --mixed
或git reset --mixed head
,用head指向的目錄重置暫存區。
git reset --soft head^
:不改變工作區與暫存區,maser的引用回滾一次。
git commit --amend
與git reset --soft
此前用git commit --amend
修改過使用者名稱和email,相當於執行了如下命令
git reset --soft head^
git commit -e -f .git/commit_editing
原本指向.git/refs/head/master的.git/head檔案內容變成了乙個具體的commit,此時可以
此時,git會進入分離頭指標狀態,在此之後的提交不會併入master分支。除非執行git checkout master.
在執行git checkout master後,分離頭指標模式下的提交和工作區都會變為master分割槽的內容。可以通過git merge命令合併master和head
執行git merge的具體操作如下
(1)執行git branch -v ,檢視輸出,確認處於master分支。
(2)執行合併操作,將「分離頭指標」狀態下的提交合併到當前分支
git merge ac818291c
此時工作區會發生改變。
(3)檢視日誌git log --graph --pretty=oneline
會發現日誌中間出現開發分支,並在最終進行了合併。最新提交將有兩個父提交
git 學習筆記5 rm mv,undo
刪除檔案 rm unix刪除檔案 git rm git刪除檔案 git rm f git強制刪除檔案 git rm git刪除所有臨時檔案移動檔案,或檔案重新命名 git mv file from file to對於提交不完全,或者想要修改注釋的 git commit amend 重新提交對於處於暫...
Git學習筆記
git stash git stash list 顯示git棧內的所有備份,可以利用這個列表來決定從那個地方恢復。git stash clear 清空git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。關於git stash的詳細解釋,適用場合,這裡做乙個說明 使用git...
git 學習筆記
1 git checkout master 切換分支 2 git checkout b xx 新建分支,同時切換到該分支 3 dev 4 git add a 將變動檔案,提交到index 5 git commit m 將 暫存區 檔案,加入到版本控制中。6 git checkout master 7...